0
我有2 structs
只有通过协议相关。我试图在两种类型之间进行转换,因为它们共享一个协议,但是我得到一个运行时错误。仅使用协议在类型之间进行转换?
这就是我想要做的事:
protocol A {
var id: String { get }
var name: String { get }
var isActive: Bool { get set }
}
struct Entity: A {
let id: String
var name: String
var isActive: Bool
func someFun() {
print("\(name), active: \(isActive)")
}
}
struct ViewModel: A {
let id: String
var name: String
var isActive: Bool
}
let vm = ViewModel(id: "abc", name: "John Doe", isActive: true)
let pt = vm as A
let et = pt as! Entity
print(et.someFun()) //crash
我得到的错误是:
Could not cast value of type '__lldb_expr_87.ViewModel' (0x111835638) to '__lldb_expr_87.Entity' (0x111835550).
这是一个真正的无赖,因为如果我有几百万的记录,我不我想要循环每一个手动转换一个。我希望能暗中神奇投这样的:
let entity = vm as A as Entity
let entities = vms as [A] as [Entity]
任何性能敏感的方式来传递边界之间的对象,而不通过每一个循环?
你不能那样做,因为协议只保证两种类型都实现了协议要求。它并不能保证两种类型都是可以互换的。顺便提一下,Swift提供了'map'之类的函数来避免循环(尽管框架使用循环)。 – vadian