ı Otobüs genel sınıf var diyelim:Kontrol AnyObject Swift
class Bus<T> {
func doSomething() {}
}
ve bunu örneğini oluşturabilir:
var myBus = Bus<String>()
Şimdi bir fonksiyonu var Bu, AnyObject
'un bir parametresini alır ve bu sınamaları test eder:
func checkType(object: AnyObject) {
if let foo = object as? String {
println("string")
}
}
Benim sorunum, türünün Bus
türünde olup olmadığını denetlemenin bir yolu göremiyorum vetüründe doSomething()
işlevini çalıştırıyor. Herhangi bir yardım takdir edilecektir.
Düzenleme: Protokoller de gerektiği bu şekilde çözmeye görünmüyor.
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>())
Düzenleme örneğiniz, '@ objc' kullanarak, Swift 1.2 ile segfault görünmüyor - ancak genel sınıflardaki bu yöntemlerin bir hata (daha önce problem olan, daha az incelikle ele alınmış olması) vermez. @ objc' (çünkü Objective-C jenerikleri desteklememektedir). Ancak, protokolde '@ objc' niteleyicisini bırakırsanız, umulan gibi çalışır (yine, protokoller ve daha fazlası gibi daha fazla özellik tanıtan Swift 1.2'i kullanarak) –