如何在Swift 3中的CGFloat扩展中使用可变变量

时间:2016-10-15 09:57:28

标签: ios swift

我目前正在将分叉框架升级到Swift 3。

使用Swift 2代码:

public extension CGFloat {

    var roundToNearestHalf: CGFloat {
        return round(self * 2)/2 
    }
}

在Swift 3中,返回会抛出compiler error : Cannot use mutating member on immutable value: 'self' is immutable

我能够找到大量的文档,为什么struct的方法需要变量。但到目前为止,我还没有找到变量的解决方案。

如果我输入关键字mutating,编译器会抛出错误:Expected declaration

public extension CGFloat {

    var roundToNearestHalf: CGFloat mutating {
        return round(self * 2)/2
    }
}

enter image description here

我对这个问题的研究是,代码似乎是错位的 - 所以它需要在一个函数内。

public extension CGFloat {

    mutating func roundToNearestHalf() -> CGFloat {
        var roundToNearestHalf: CGFloat {
            return round(self * 2)/2
        }
    }
}

现在编译器抱怨`*``

enter image description here

对该问题的研究将我带到了this线程,这表明我也尝试使用round函数。

由于这段代码显然适用于Swift 3,我想知道为什么它不再存在。为什么var必须现在声明为可变?我现在需要如何声明var roundToNearestHalf?非常感谢帮助。

1 个答案:

答案 0 :(得分:2)

现在,不可变的东西通常都有过去的分词名称。

join(),reversed(),rounded()方法支持流畅的链接

之前在现在时有很多自由函数在语法中用语法参与

喜欢join(x),round(x)......它们在语法上看起来非常相似,这使得圆形看起来会改变x,即使它没有。现在它确实:))

现在一切都变得更加精简,这是每个人都在谈论的重大API改变:)