这是我的设置:
protocol Client {
var identifier: NSUUID { get }
}
class PeripheralClient: NSObject, Client {
var identifier: NSUUID {
get {
return peripheral.identifier
}
}
}
protocol NetworkManager {
var clients: [Client] { get set }
}
class CentralNetworkManager: NSObject, NetworkManager {
var clients = [Client]()
var peripheralClients: [PeripheralClient] {
get {
return clients as [PeripheralClient]
}
}
}
第一次访问peripheralClients
数组时出现此运行时错误:数组元素无法桥接到Objective-C 。
从此answer到具有类似错误的问题,看起来swift要求转换为AnyObject
时数组中的项目NSArray
兼容。这意味着Swift的阵列类型转换正在使用NSArray,因此我无法从类型为协议的数组中进行向下转换。
任何人都有一个很好的建议来解决这个问题吗?
答案 0 :(得分:2)
您是否尝试将Client
声明为Objective-C协议?
@objc protocol Client {
var identifier: NSUUID { get }
}
答案 1 :(得分:0)
是的,看起来,Swift本身没有Array<T>
到Array<U>
投射功能,它使用了Obj-C工具。
相反,为避免这种情况,您可以使用map
转换每个元素,例如:
var clients = [Client]()
var peripheralClients: [PeripheralClient] {
get {
return clients.map { $0 as PeripheralClient }
}
}