Двоичный оператор '.. <' не может быть применен к операндам типа 'Int' и 'Int?' - PullRequest
0 голосов
/ 07 мая 2018

Я получаю ошибку после преобразования Objective-C в Swift. Спасибо

var gymdays = GymHours.orderedDays()
for i in 0..<gymdays?.count {

}

error screen

Мой код Objective-C:

NSArray *days = [GymHours orderedDays];
for (uint i = 0; i < days.count; i++) {

}

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Int? не является обязательным, поэтому XCode сообщает вам, что вы пытаетесь использовать значение, которое может или не может быть там.

Вы можете использовать следующее, чтобы избежать сбоя, если значение равно nil:

for i in 0..<(gymdays?.count ?? 0) {

}
0 голосов
/ 07 мая 2018

Перестаньте пытаться конвертировать код Objective C, просто написав наиболее близкую вещь в Swift. Он (как правило) не работает, и даже когда это работает, он генерирует дерьмовый код Swift. Вместо этого изучите ObjC и Swift до такой степени, что вы сможете понять, что выражается в коде Objective C, чтобы вы могли написать лучший код Swift для его выражения.

Этот код является циклом по индексам NSArray. В Swift вы не должны использовать count для этого. Вы можете просто перебрать ... indices ... массива:

for index in gymDays.indices { ...

Очень вероятно, что на следующей строке кода Objective C вы увидите что-то вроде let gymDay = [gymDays objectAtIndex: i]. В этом случае в Swift вы можете просто перебирать элементы массива напрямую:

for gymDay in gymDays { ...

Если вам нужен как индекс, так и элемент, тогда вы просто используете enumerated():

for (index, gymDay) in gymDays.enumerated() { ...
0 голосов
/ 07 мая 2018

Вы можете безопасно использовать if let, чтобы избежать сбоев, которые могут привести к принудительному развертыванию, если оно равно n *

if let gymdays = GymHours.orderedDays()  {
{
     for i in 0..<gymdays.count { }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...