Ios Swift支持隐式转换吗?

Ios Swift支持隐式转换吗?,ios,swift,implicit-conversion,primitive-types,Ios,Swift,Implicit Conversion,Primitive Types,例如,我有以下代码: 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

例如,我有以下代码:

    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”

是否有隐式转换数据类型的方法(可能仅适用于基本数据类型)

编辑:

我知道如何使用建议的特定类型的构造函数进行显式转换。但这对我的问题没有太大帮助,因为我们甚至不知道在哪里添加转换。我简化了我在操场上的表达:

问题出在“padding”变量中,错误消息为

“Double”不能转换为“UInt8”

所以我做了转换:

现在问题出在“blockWidth”变量中

我再次添加了转换:

错误消息是:

类型“UInt8”不符合协议“FloatLiteralCovertible”

最后的工作表述是:

它简单而迅速吗?我不这么认为。

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

variable_name.bridgeToObjectiveC().intValue

将名为variable_name的变量转换为整数

Swift中没有隐式强制转换

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

比如,如果您想从double中获得Float,那么可以使用
Float(doubleValue)
,同样,如果您想将Float转换为整数,那么可以使用
Int(floatValue)

就你而言:

let intValue = UInt8(doubleValue)
请注意,小数点后的值将丢失。所以,选择一个更好的方法。以上转换只是为了帮助您理解


请注意,Swift在推断浮点数类型时总是选择Double(而不是Float)

Swift不再支持Xcode6 GM中的隐式强制转换。以下答案仅适用于Xcode6测试版。


我不想谈论隐式强制转换是好是坏,但如果您真的想使用
\uu conversion()

e、 g.如果需要
UInt8
Int
可以从
Double

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



注意:我不会把这个放在我的生产代码中。我只想在可能的情况下指出,但不推荐。

至少感谢您没有建议转换为字符串并返回。问题是关于表达式中的隐式转换,例如从
Double
Int
。您的答案仅与此相关,但在其他情况下可能有用;)Apple非常明确地表示,Swift中没有隐式类型转换,并且已经相当公开和明确地说明了原因。消除隐式转换可以消除至少一个常见的(和潜在的难于发现的)类错误。@戴维在SWIFT基础框架中有许多隐式类型转换。e、 g.
Array
/
NSArray
Int
/
NSNumber
。至少在Array/NSArray未转换的情况下,它们是桥接的。一个数组就是一个NSArray,它有一个isa插槽和所有东西。与其他基金会的桥接同样发生。即使如此,在大多数情况下,您最终还是必须显式地强制转换它以使其有用。在Int/NSNumber的情况下,它只在非常特定的语义情况下进行,并且,就像Swift的许多丑陋之处一样,是因为试图保持Objective-C兼容性。从很多方面看,他们似乎有一个很好的干净的语言,然后决定将Objective-C兼容性移植到它上。我编辑了这个问题,从标题和正文中删除了高度主观的语言-问题本身很好,但是我建议不要使用那些看起来很挑衅性的措辞。我喜欢swift,因为它的语法简洁明了,所以我可以为复杂的情况编写优雅的代码。但对于这样一个简单的案例,斯威夫特让它变得如此困难。我并不是说隐式转换适用于所有情况。但是,如果它至少支持基本数据类型的隐式转换,它将使程序员的生活更轻松。最后一句话是非常重要的提示,因此我通常在SpriteKit中使用Double作为数据类型,以简化转换。顺便说一句,CGFloat是Double而不是Float。这是一个很好的发现,但我敢打赌这在swift1.0中是不可能的(或者如果是的话,它可能是,但使用的私有API较少)。但我希望能够做到这一点;一个强大的功能时,使用极为谨慎和适度。
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>