[英]How to declare “throws” for `subscript(dynamicMember:)`in @dynamicMemberLookup in swift?
快速使用@dynamicMemberLookup時, subscript
無法聲明“拋出”。
subscript(dynamicMember member: String) -> Any
還行吧。
subscript(dynamicMember member: String) throws -> Any
這將產生一個編譯錯誤。
該語言目前不支持使用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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.