比方說,我有泛型類總線:檢查AnyObject是通用型的雨燕
class Bus<T> {
func doSomething() {}
}
,我可以創建它的實例:
var myBus = Bus<String>()
現在我有一個函數需要AnyObject
的一個參數並測試它的類型:
func checkType(object: AnyObject) {
if let foo = object as? String {
println("string")
}
}
我的問題是,我看不到一種方法來檢查object
是Bus
類型,如果它是Bus
類型,則運行功能doSomething()
。任何幫助,將不勝感激。
編輯:協議也似乎沒有解決這個問題,他們應該的樣子。
import Foundation
@objc protocol BusProtocol {
func doSomething() -> Void
}
class Bus<T> : BusProtocol {
func doSomething() -> Void {
println("asdf")
}
}
func checkType(object: AnyObject) {
if let foo = object as? Bus<AnyObject> {
foo.doSomething() // no match
}
if let foo = object as? Bus<Any> {
foo.doSomething() // no match
}
if let foo = object as? Bus<String> {
foo.doSomething() // prints "asdf"
}
if let foo = object as? BusProtocol {
foo.doSomething() // SIGABRT -- -[SwiftObject doesNotRecognizeSelector:]
}
}
checkType(Bus<String>())
你使用'@ objc'編輯示例不會出現與Swift 1.2的段錯誤 - 但它確實會給你一個錯誤(這可能是以前的問題,處理得不那麼優雅)泛型類中的方法不能' @ objc'(因爲Objective-C不支持泛型)。但是,如果你在協議上放棄了'@ objc'限定符,它就像希望的一樣工作(再次使用Swift 1.2,它引入了更多的協議和'as'功能) – 2015-02-23 17:15:27