2016-11-23 76 views
-1

我得到一个错误的波纹管代码:如何在swift3中使用max?

var bubbleWidth:CGFloat! 
bubbleWidth:CGFloat = max(CGFloat(15) , bubbleWidth) 

这里是错误消息:“!CGFloat的” 没有候选人能产生预期的语境结果类型

这段代码在swift 2上没有任何问题,我不知道为什么现在我得到这个错误!

编辑: 这里是我真正的代码:

var bubbleWidth:CGFloat! 
     bubbleWidth = imageView.frame.width + 11 

    bubbleWidth = max(CGFloat(15) , 
          bubbleWidth) 

这里是我receving错误: enter image description here

编辑: 请注意:我不想赋值到bubbleWidth,像 VAR bubbleWidth:CGFloat的= -1

由于

+2

'bubbleWidth'在'max'表达是'nil'(无值)。你能指望什么? – vadian

+4

是在第二行':CGFloat'甚至有效的语法? – luk2302

+3

你看到了错字吗?它应该是'CGFloat'而不是'CGFLoat' – dirtydanee

回答

1

这是SE-0054 Abolish ImplicitlyUnwrappedOptional type结果已在斯威夫特3得到落实:

然而,外观!在属性或变量声明类型的末尾不再指示声明具有IUO类型;相反,它表明(1)声明具有可选类型,并且(2)声明具有一个属性,指示其值可能被隐式强制。 ...

如果表达式可以使用强可选类型进行显式类型检查,则会是。但是,如果需要,类型检查器将回退到强制可选项。

现在,人们可以说,编译器应该回落到展开 可选在

bubbleWidth = max(CGFloat(15), bubbleWidth) 

但由于某些原因,只有一个浮动工作文字

bubbleWidth = max(15, bubbleWidth) 

和我不确定这是否是一个错误。可替代地,解开的值明确

bubbleWidth = max(CGFloat(15), bubbleWidth!) 

或 - 更好 - 提供与所述零-合并运算符??一个缺省值:

bubbleWidth = max(CGFloat(15), bubbleWidth ?? 0) 
+0

非常感谢,但我真的很困惑,这是我第一次知道我应该解开CGfloat! 。我知道我应该解开它,只要我以这种方式申报CGFloat? – david

+0

@david:看看SE-0054。 CGFloat的!主要是像CGFloat一样对待?现在。 –

+0

你能否给一个官方的苹果链接? – david