在 Swift 中是否可以为您的 class 类型创建隐式转换?

In Swift is it possible to create implicit conversions for your class types?

我喜欢 C# 的一个原因是您可以为 classes 定义隐式转换器。例如,我创建了一个 VectorGeometryBuilder class,它具有 MoveForwardByXTurnByYDegreesLineToPoint 等方法。然后它定义了到 [= 的隐式转换18=] class。这允许我使用我漂亮的构建器来创建我的几何体,然后将整个 kit-n-caboodle 传递给任何需要 Geometry 的函数,即使 VectorGeometryBuilder 本身不是 Geometry. 的子class 相反,它将 Geometry 对象公开为 属性,隐式转换器获取并 returns.

我想知道 Swift 是否有类似的东西。

考虑这个虚构的场景...

class FauxInt
{
    init(_ initialValue:Int)
    {
        value = initialValue
    }
    var value:Int
}

let fauxInt = FauxInt(14)

这些是我努力做到的事情...

let realInt:Int = fauxInt

someFuncTakingAnInt(someInt:fauxInt)

同样,到 Int 的转换应该是隐式的,意味着任何需要 Int 的地方,我可以使用或传递 FauxInt

有什么方法可以使上述成为可能吗?

Swift 不支持隐式转换 - 最接近的等效项是通过额外的构造函数完成的。所以要将 Double 转换为 Int:

let i: Int = Int(myDouble)

在您的情况下,您可以定义 Int 的扩展以创建一个将 fauxInit 作为参数的新 init:

extension Int {
    init(_ myFaux: FauxInt) {
        self = myFaux.value
    }
}

let fauxInt = FauxInt(14)
let realInt = Int(fauxInt)