如果我有两种类型
struct PersonFromLibraryA {
let name: String
let age: Int
}
struct PersonFromLibraryB {
let name: String
let age: Int
}
有没有办法隐式地将 A
传递到需要 B
的方法中?
func doSomething(withPerson person: PersonFromLibraryA) {
...
}
let person = PersonFromLibraryB(name: "Alice", age: 42)
doSomething(withPerson: person))
我希望这是类型安全的,即如果 A 或 B 以任何方式分歧,则不应编译。
我遇到过大约 20 种这种情况(我正在库中的抽象层之间进行映射),并且我已经厌倦了使用样板映射方法填充文件!
我怀疑我已经知道这个问题的答案,但我想我会在这里问它只是为了确定!
最佳答案
同意 rmaddy 的观点,使用类型安全来解决此问题的一种方法是协议(protocol)(如果没有类型安全,您可以使用 unsafeBitCast 来实现,但请不要这样做)。不过,这会引发一个警告标志,如果您有许多相同但层与层之间不同的类型,则您可能过度抽象了某些内容(或更可能:沿着错误的轴抽象)。
关于swift - swift 中两个 'identical' 类型之间隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41025578/