Mar*_*eIV 5 type-conversion implicit-conversion swift
我喜欢C#的一个原因是你可以为你的类定义隐式转换器.例如,我创建了一个VectorGeometryBuilder具有类似方法类MoveForwardByX,TurnByYDegrees,LineToPoint等,然后定义的隐式转换到一个Geometry类.这允许我使用我漂亮的构建器来创建我的几何,然后只需将整个kit-n-caboodle传递给任何期望a的函数Geometry,即使它VectorGeometryBuilder本身不是子类Geometry.而是它将一个Geometry对象暴露为一个属性,这是隐含的转换器抓住并返回.
我想知道的是Swift是否有类似的东西.
考虑这个构成的场景......
class FauxInt
{
init(_ initialValue:Int)
{
value = initialValue
}
var value:Int
}
let fauxInt = FauxInt(14)
Run Code Online (Sandbox Code Playgroud)
这些是我想要做的事情......
let realInt:Int = fauxInt
someFuncTakingAnInt(someInt:fauxInt)
Run Code Online (Sandbox Code Playgroud)
同样,转换到Int应该是隐含的意思是任何期望的Int,我可以使用或传递一个FauxInt代替.
有没有办法让上述成为可能?
Swift不支持隐式转换 - 最接近的等价是通过额外的构造函数完成的.所以要将Double转换为Int:
let i: Int = Int(myDouble)
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您可以定义Int的扩展以创建一个新的init,它将fauxInit作为参数:
extension Int {
init(_ myFaux: FauxInt) {
self = myFaux.value
}
}
let fauxInt = FauxInt(14)
let realInt = Int(fauxInt)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
657 次 |
| 最近记录: |