【问题标题】:How to declare "throws" for `subscript(dynamicMember:)`in @dynamicMemberLookup in swift?如何在swift中的@dynamicMemberLookup中为`subscript(dynamicMember :)`声明“抛出”?
【发布时间】:2019-04-18 21:37:23
【问题描述】:
在 swift 中使用 @dynamicMemberLookup 时,subscript 无法声明“抛出”。
subscript(dynamicMember member: String) -> Any
没关系。
subscript(dynamicMember member: String) throws -> Any
这会产生编译错误。
【问题讨论】:
标签:
swift
subscript
throws
【解决方案1】:
目前该语言不支持在 subscript 中使用 throws。但是你可以使用一些技巧来避免这种情况,同时保留throws的特性:
public subscript(dynamicMember member: String) -> () throws -> Any {
return { try REAL_FUNCTION_THAT_THROWS() }
}
只需声明订阅返回一个块,然后在函数后面添加()即可执行真正的函数。所以你可以这样编码:
@dynamicMemberLookup
class A {
public subscript(dynamicMember member: String) -> () throws -> Any {
return { try REAL_FUNCTION_THAT_THROWS() }
}
}
let a = A()
let value = try? a.doWhatYouWant()
let value2 = try? a.anotherMethod()