2016-04-20 4 views
2

Я знаю, что есть другой поток с тем же вопросом, но это не говорит, что на самом деле вызывает проблемуТип 'Int' не соответствует протоколу 'BooleanType'?

Im новой быстр, поэтому я немного запутанную на этом. Я написал очень простую программу, которая должна начинаться с числа последователей по умолчанию (0) и присваивать ее «defaultfollowers», и как только это станет 1, ее предполагается стать «последователями», но я получаю сообщение об ошибке «Type 'Int' не соответствует протоколу «BooleanType». Что является причиной этого и почему

var followerdeafault = 0 
var followers = 0 
if (followerdeafault++){ 
var followers = followerdeafault 

} 
+2

'followerdeafault ++' возвращает Int. 'if' берет Bool. Они не совпадают. – jtbandes

+0

Вы не сравниваете значение правильно. Прочитайте [Операторы сравнения] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-ID70). –

+0

Именно поэтому '++' устаревает. Ужасные побочные эффекты в условиях 'if'. – Sulthan

ответ

1

В Swift вы не можете неявно заменить Int вместо Bool. Это было сделано, чтобы предотвратить путаницу и сделать код более читаемым.

Таким образом, вместо этого

let x = 10 
if x { /* do something */ } 

Вы должны написать это:

let x = 10 
if x != 0 { /* do something */ } 

Также вы не можете передать Факультативный вместо Bool, чтобы проверить, если это nil, как вы могли бы сделать в Objective-C. Вместо этого используйте явное сопоставление:

if myObject != nil { /* do something */ } 
0

Как сказал комментарии, вы пытаетесь использовать Int в заявлении в Bool сравнения. То, что вы ищете, вероятно, что-то вроде этого:

if followerdeafuaut++ == 1 { ... } 

Также примечание стороны: оператор ++ осуждается, двигаясь в направлении использования +=