我喜欢C#的一个方面是你可以为你的类定义隐式转换器。例如,我创建了一个VectorGeometryBuilder
类,其中包含MoveForwardByX
,TurnByYDegrees
,LineToPoint
等方法。然后,它定义了对Geometry
类的隐式转换。这允许我使用我漂亮的构建器来创建我的几何体,然后将整个kit-n-caboodle传递给期望Geometry
的任何函数,即使VectorGeometryBuilder
本身不 Geometry.
的子类相反,它将Geometry
对象公开为属性,隐式转换器会抓取并返回该对象。
我想知道的是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
。
有没有办法让上述成为可能?
答案 0 :(得分:6)
Swift不支持隐式转换 - 最接近的等价是通过额外的构造函数完成的。所以要将Double转换为Int:
let i: Int = Int(myDouble)
在您的情况下,您可以定义Int的扩展以创建一个新的init,它将fauxInit作为参数:
extension Int {
init(_ myFaux: FauxInt) {
self = myFaux.value
}
}
let fauxInt = FauxInt(14)
let realInt = Int(fauxInt)