Разница между NSRange и NSMakeRange

Есть ли разница между:

NSRange(location: 0, length: 5)

а также:

NSMakeRange(0, 5)

Поскольку Swiftlint предупреждает, когда я использую NSMakeRange, но я не знаю почему.

Спасибо за помощь :-)

Ответ 1

Единственное различие между ними состоит в том, что

NSRange(location: 0, length: 5)

является конструктором для NSRange, а

NSMakeRange(0, 5)

- это функция, которая создает новый экземпляр NSRange (наиболее вероятно, используя тот же самый конструктор), и на самом деле является избыточным в Swift, я думаю. Swift просто унаследовал его от Objective-C. Я бы придерживался прежнего

Ответ 2

Основное различие заключается в том, что

NSRange(location: 0, length: 24) 

является автоматически сгенерированным методом struct init в Swift и

NSMakeRange(0, 24) 

это только предопределенный макрос, который устанавливает местоположение и длину

NS_INLINE NSRange NSMakeRange(NSUInteger loc, NSUInteger len) {
    NSRange r;
    r.location = loc;
    r.length = len;
    return r;
}

В общем, результат один и тот же, но если вы используете Swift, первый и если вы пишете код ObjC, используйте второй;)