我目前正在将分叉框架升级到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
}
}
我对这个问题的研究是,代码似乎是错位的 - 所以它需要在一个函数内。
public extension CGFloat {
mutating func roundToNearestHalf() -> CGFloat {
var roundToNearestHalf: CGFloat {
return round(self * 2)/2
}
}
}
现在编译器抱怨`*``
对该问题的研究将我带到了this线程,这表明我也尝试使用round
函数。
由于这段代码显然适用于Swift 3,我想知道为什么它不再存在。为什么var必须现在声明为可变?我现在需要如何声明var roundToNearestHalf
?非常感谢帮助。
答案 0 :(得分:2)
现在,不可变的东西通常都有过去的分词名称。
join(),reversed(),rounded()方法支持流畅的链接
之前在现在时有很多自由函数在语法中用语法参与
喜欢join(x),round(x)......它们在语法上看起来非常相似,这使得圆形看起来会改变x,即使它没有。现在它确实:))
现在一切都变得更加精简,这是每个人都在谈论的重大API改变:)