float2扩展错误,在存储属性初始化之前自己使用?

时间:2015-09-11 11:49:55

标签: swift

我回顾了我在Xcode 7.0 beta 3 (7A152u)中执行的项目,其中我使用以下extensionCGPoint添加float2初始化程序。 (下面的代码与WWDC2015演示项目DemoBots中使用的代码完全相同)早在7月下旬这个工作正常,但现在使用Xcode 7.0 GM (7A218)我收到了错误:

TEST.swift:32:11: 'self' used before all stored properties are initialized

我查看了各种发行说明,但找不到任何相关的内容,任何人都可以帮助我或指出我正确的方向,为什么现在失败了,也许如何解决它?

// Extend `float2` to add an initializer from a `CGPoint`.
extension float2 {
// MARK: Initialization

    /// Initialize with a `CGPoint` type.
    init(_ point: CGPoint) {
        x = Float(point.x) // << Above Error Here
        y = Float(point.y) // << Above Error Here
    }
}

1 个答案:

答案 0 :(得分:2)

如果您使用以下问题,问题就解决了:

init(_ point: CGPoint) {
    self = float2(x: Float(point.x), y: Float(point.y))
}

init(_ point: CGPoint) {
    self.init(x: Float(point.x), y: Float(point.y))
}

或者,如Martin R所指出的那样:

init(_ point: CGPoint) {
    self.init()
    x = Float(point.x)
    y = Float(point.y)
}

第二种方式用于latest DemoBots project中的float2扩展名。

正如Stephen Canon在下面的评论中所说,这是有效的,因为:在WWDC种子中,simd结构将本机标量作为组件,因此初始化这种方式起作用。在后面的种子中,simd结构由LLVM内置向量支持,组件xy等只是{ get set }计算属性。