的iOS在Swift3
var a: CGFloat!
var b: CGFloat!
var c: CGFloat!
添加多个可选值初始化后,然后的iOS在Swift3
let x = a + b + c
的Xcode8将显示
二元运算符 '+' 不能应用于类型的操作数 'CGFloat的' 和' CGFloat的!”
猜先加他们两个做这个错误
也许我可以用先添加一个,然后添加第三修复
但它将我的X更改为var和不简明过去
有何建议?
编辑:必须有我们可以面对某些应用场景下,我写了这个简单的演示仅有4表示这个问题:)
它看起来像加A + B产生CGFloat的,然后编译器不要确定如何添加c,这是CGFloat类型!
如果将c定义为var c: CGFloat = 0
(仅用于实验) - 将编译相同的代码。
我发现了两个多总结这3个变量的方法:
let x = a.advanced(by: b + c)
或
let y = CGFloat(a + b) + c
两个看起来并不酷我,但现在至少编译器知道如何添加这些值。 也许这是Swift错误,并且很快就会被修复。
import CoreGraphics
var a: CGFloat! = 1
var b: CGFloat! = 2
var c: CGFloat! = 3
if let a:CGFloat=a, let b:CGFloat=b, let c:CGFloat=c
{
let x = a + b + c
}
else
{
print("at least one of them was nil")
}
定义他们为CGFloat!
说,他们是自选的,但你知道他们会包含您将使用它们的点值。
let a:CGFloat=a
解开一个到一个新的CGFloat的(不是CGFloat的! - 新一不可选)
这是一个运行时错误,如果它不包含一个值,所以if
处理这种情况。
请注意,a
内部的if隐藏了一个外部 - 它不是同一个对象。
还要注意的是你,你解开他们并不需要的类型 - 它们会自动CGFloat
(感谢@NRitH)
没有必要在每个'if let'表达式中指定':CGFloat'。 – NRitH
你应该不会做这样的事情风险价值:CGFloat的?而不是var a:CGFloat! ? –
似乎是我的一个bug。简单的解决方法'让x = 0 + a + b + c'。 – OOPer
@UmairAfzal我使用强制unpackage(!)以方便(太多的不必要的让x =可选总是很无聊:(),并且因为这个语法仍然不被弃用。我认为应该有一个简洁的方法来做到这一点...:) – d0ye