Bag*_*yer 29 primitive-types implicit-conversion ios 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
Run Code Online (Sandbox Code Playgroud)
我收到了错误:
'Double'不能转换为'UInt8'
有没有办法隐式转换数据类型(可能只对原始数据类型)?
编辑:
我知道如何通过使用Iducool建议的特定类型的构造函数来进行显式转换.但这对我的问题没什么大帮助,因为我们甚至不知道在哪里添加转换.我简化了我在游乐场的表达:

问题出在"填充"变量,错误信息是
'Double'不能转换为'UInt8'.
所以我做了转换:

那么现在的问题是"blockWidth"变量.
我再次添加了转换:

错误信息是:
类型'UInt8'不符合协议'FloatLiteralCovertible'
最终的工作表达式是:

它简单快捷吗?我不这么认为.
Idu*_*ool 34
在Swift中没有隐式转换.
在swift中转换的简单方法是使用特定类型的构造函数.
就像你想让Float从double获得然后你可以使用Float(doubleValue)和相同的方式如果你想将float转换为整数然后你可以使用Int(floatValue).
在你的情况下:
let intValue = UInt8(doubleValue)
Run Code Online (Sandbox Code Playgroud)
请注意,小数点后您将丢失任何值.所以,选择一种更好的方式.以上转换只是为了帮助您理解.
请注意,Swift在推断浮点数的类型时总是选择Double(而不是Float).
Bry*_*hen 26
Swift不再支持Xcode6 GM中的隐式转换.以下答案仅适用于Xcode6 beta版.
我不想谈论隐式演员的好坏,但如果你真的想要,你可以拥有它 __conversion()
例如,如果您需要UInt8并且Int能够转换Double
extension Double {
func __conversion() -> UInt8 { return UInt8(self) }
func __conversion() -> Int { return Int(self) }
// add more if you need to
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
注意:我不会将它放在我的生产代码中.我只想指出它,如果可能,但不建议它.
| 归档时间: |
|
| 查看次数: |
21348 次 |
| 最近记录: |