Làm thế nào để liệt kê tất cả các lớp thực hiện một giao thức đã cho trong Swift?Làm thế nào để liệt kê tất cả các lớp phù hợp với giao thức trong Swift?
Giả sử chúng ta có một ví dụ:
protocol Animal {
func speak()
}
class Cat:Animal {
func speak() {
print("meow")
}
}
class Dog: Animal {
func speak() {
print("Av Av!")
}
}
class Horse: Animal {
func speak() {
print("Hurrrr")
}
}
Đây là hiện tại của tôi (không biên dịch được) Cách tiếp cận:
func getClassesImplementingProtocol(p: Protocol) -> [AnyClass] {
let classes = objc_getClassList()
var ret = [AnyClass]()
for cls in classes {
if class_conformsToProtocol(cls, p) {
ret.append(cls)
}
}
return ret
}
func objc_getClassList() -> [AnyClass] {
let expectedClassCount = objc_getClassList(nil, 0)
let allClasses = UnsafeMutablePointer<AnyClass?>.alloc(Int(expectedClassCount))
let autoreleasingAllClasses = AutoreleasingUnsafeMutablePointer<AnyClass?>(allClasses)
let actualClassCount:Int32 = objc_getClassList(autoreleasingAllClasses, expectedClassCount)
var classes = [AnyClass]()
for i in 0 ..< actualClassCount {
if let currentClass: AnyClass = allClasses[Int(i)] {
classes.append(currentClass)
}
}
allClasses.dealloc(Int(expectedClassCount))
return classes
}
Nhưng khi gọi hoặc
getClassesImplementingProtocol(Animal.Protocol)
hoặc
getClassesImplementingProtocol(Animal)
hoặc
getClassesImplementingProtocol(Animal.self)
kết quả trong lỗi Xcode: không được chuyển đổi loại giá trị (Animal.Protocol) .Loại đối số dự kiến 'Giao thức'.
Có ai quản lý việc này không?
Lỗi nào xảy ra? – luk2302
Tôi nghĩ điều này có thể hữu ích cho bạn: http://stackoverflow.com/questions/28124684/swift-check-if-generic-type-conforms-to-protocol –