swift - swift 中两个 'identical' 类型之间隐式转换

标签 swift types casting

如果我有两种类型

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/

相关文章:

c++ - 使用返回值传递给构造函数不起作用

Swift 三元运算符编译错误

iOS - NSNotificationCenter 延迟

swift - 在 Swift 4 for MacOS X 中,如何在 NSBox 中嵌入 NSStackView?

ios - 添加、重用和删除 NSLayoutAnchors

c++ - 函数 pow() int C++

c# - 使用列表框中对象的属性

java - 具有不同数据类型的数组,即字符串和整数。 (面向对象)

mysql - 将无符号字符数组插入数据库时​​出现问题

C# Math.pow( ) 返回无穷大?