2016-09-16 79 views
3
var a: CGFloat! 
var b: CGFloat! 
var c: CGFloat! 

添加多个可选值初始化后,然后的iOS在Swift3

let x = a + b + c 

的Xcode8将显示

二元运算符 '+' 不能应用于类型的操作数 'CGFloat的' 和' CGFloat的!”

猜先加他们两个做这个错误

也许我可以用先添加一个,然后添加第三修复

但它将我的X更改为var和不简明过去

有何建议?


编辑:必须有我们可以面对某些应用场景下,我写了这个简单的演示仅有4表示这个问题:)

+0

你应该不会做这样的事情风险价值:CGFloat的?而不是var a:CGFloat! ? –

+1

似乎是我的一个bug。简单的解决方法'让x = 0 + a + b + c'。 – OOPer

+0

@UmairAfzal我使用强制unpackage(!)以方便(太多的不必要的让x =可选总是很无聊:(),并且因为这个语法仍然不被弃用。我认为应该有一个简洁的方法来做到这一点...:) – d0ye

回答

0

它看起来像加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错误,并且很快就会被修复。

0
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)

+0

没有必要在每个'if let'表达式中指定':CGFloat'。 – NRitH