2016-11-23 75 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