首页 > 解决方案 > 如何在 Swift 中实现隐式转换?

问题描述

例如,任何类型T都可以隐式转换为函数参数UnsafePointer<T>。这是 Swift 编译器中的一个 hack 吗?我可以自己实现吗?

struct A {
    // do something, allow A to implicitly convert to B
}

func readB(b: B) { ... }

readB(A) // Ok

实际上我正在阅读一些关于Swift 的内容UnsafePointer,当调用将指针作为参数的函数时,Swift 允许隐式指针转换或桥接。我只是想知道 Swift 是如何支持这个特性的。

标签: iosswift

解决方案


不,您不能自己实现隐式转换或桥接

最简洁和惯用的解决方案是将类型转换实现为初始化程序。

extension B {
  init(_ a: A) {
    // Convert.
  }
}

readB(
  b: .init(A())
)

推荐阅读