2016-11-23 2 views
-1

я получаю сообщение об ошибке для сильфона кода:Как использовать max с swift3?

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

здесь сообщение об ошибке: «! CGFloat» ни один из кандидатов не дают ожидаемый результат контекстному типа

Этот код работал без проблем в swift 2, я не знаю, почему я получаю эту ошибку сейчас!

EDIT: вот мой реальный код:

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

    bubbleWidth = max(CGFloat(15) , 
          bubbleWidth) 

и вот ошибка, что я receving: enter image description here

Edit: обратите внимание: я не хочу, чтобы присвоить значение к bubbleWidth, как и вар bubbleWidth: CGFloat = -1

Благодаря

+2

'bubbleWidth' в' max' выражения является 'nil' (нет стоимость). Что вы ожидаете? – vadian

+4

- это ': CGFloat' во второй строке даже действительный синтаксис? – luk2302

+3

Вы видите опечатку? это должно быть 'CGFloat' не' CGFLoat' – dirtydanee

ответ

1

Это является следствием SE-0054 Abolish ImplicitlyUnwrappedOptional type, который был реализован в Swift 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

Смежные вопросы