1
在斯威夫特我可以這樣寫:你怎麼能動態測試自我類型和類型無關
func id(_: Any) -> Int? {
return nil
}
func id<T: Hashable>(hashable: T) -> Int? { // Weird, what's T needed for? Why not "func id(hashable: Hashable) -> Int? {"?
return hashable.hashValue
}
func id(object: AnyObject) -> Int? {
return reflect(object).objectIdentifier?.hashValue
}
然而上述選擇id函數來調用基於靜態(聲明)的參數類型。我真想所使用的實際運行時類型的動態版本,即我真的想:
func dynamicId(anything: Any) -> Int? {
switch anything {
case let hashable as Hashable:
return hashable.hashValue
case let object as AnyObject:
return reflect(object).objectIdentifier?.hashValue
}
return nil
}
的問題是,這兩個「案例讓... ...爲:」線被編譯器拒絕。兩行具有錯誤:
- 從低迷現狀「任意」無關型...
另外的第一行有錯誤:
- 協議「可哈希」只能被用作通用約束條件,因爲它具有自我或相關類型要求
這些錯誤對我來說似乎有點受到限制,因爲我正在測試一種類型,而不是無條件地轉換爲類型。
任何提示,我可能會寫這個?
在此先感謝 - 霍華德。
是的,動態功能目前是有限的。我希望有人有一個好主意如何做到這一點:) – 2014-11-04 01:23:22
哎呀,意思是說,AnyObject的歸屬與@objc,但它仍然被拒絕:(但完全同意,Hashable是永遠不會工作。挑選集體大腦,看看我是否錯過了一些東西。 – 2014-11-04 01:28:04