Swift是否支持隐式转换?

例如,我有以下代码:

let numberOfBlocks = 3 let blockWidth = SKSpriteNode(imageNamed: "image.png").size.width let padding = 20.0 let offsetX : Float = (self.frame.size.width - (blockWidth * numberOfBlocks + padding * (numberOfBlocks-1))) / 2 

我得到了错误:

“Double”不能转换为“UInt8”

有没有办法隐式转换数据types(也许只适用于原始数据types)?

编辑:

我知道如何使用Iducoolbuild议的特定types的构造函数来进行显式的转换。 但这对我的问题不是很有帮助,因为我们甚至不知道在哪里添加转换。 我在操场上简化了我的表情:

在这里输入图像说明

问题在于“填充”variables,错误信息是

“Double”不能转换为“UInt8”。

所以我做了转换:

在这里输入图像说明

那么现在问题在“blockWidth”variables中。

我再次添加了转换:

在这里输入图像说明

而错误信息是:

types“UInt8”不符合协议“FloatLiteralCovertible”

最后的工作expression是:

在这里输入图像说明

它简单而快捷吗? 我不这么认为。

Swift中没有隐式的投射。

在swift中简单的转换方法是使用特定types的构造函数。

就像如果你想从double获得Float那么你可以使用Float(doubleValue)和相同的方法,如果你想将float转换为整数,那么你可以使用Int(floatValue)

在你的情况下:

 let intValue = UInt8(doubleValue) 

请注意,小数点后您将失去任何值。 所以,select一个更好的方法。 以上转换只是为了帮助您理解。

请注意,在推断浮点数的types时,Swift总是selectDouble(而不是Float)。

Swift不支持在Xcode6 GM中进行隐式转换。 以下回答仅适用于Xcode6testing版。


我不想谈论隐式转换是好还是坏,但是如果你真的想用__conversion()

例如,如果你需要UInt8Int能够从Double转换

 extension Double { func __conversion() -> UInt8 { return UInt8(self) } func __conversion() -> Int { return Int(self) } // add more if you need to } 

 xcrun swift Welcome to Swift! Type :help for assistance. 1> extension Double { 2. func __conversion() -> UInt8 { return UInt8(self) } 3. } 4> var d = 1.0 d: Double = 1 5> var u8 : UInt8 = d u8: UInt8 = 1 6> 

注意:我不会把这个放在我的生产代码中。 我只想指出,如果可能,但不build议。

使用bridgeToObjectiveC()方法,您可以调用Objective-C中提供的方法将一种基本数据types转换为另一种基本数据types

 variable_name.bridgeToObjectiveC().intValue 

会将名为variable_name的variables转换为整数