簡體   English   中英

如何快速在@dynamicMemberLookup中為下標(dynamicMember :)聲明“拋出”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM