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

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

NSRange(location: 0, length: 5)

а также:

NSMakeRange(0, 5)

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

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


person auryn31    schedule 13.06.2017    source источник
comment
Ну, для одного из них я сразу знаю, что представляют значения 0 и 5, ничего не зная о NSRange.   -  person Hamish    schedule 13.06.2017


Ответы (2)


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

NSRange(location: 0, length: 5)

является инициализатором для NSRange в то время как

NSMakeRange(0, 5)

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

person Andrey Chernukha    schedule 13.06.2017

Основное отличие в том, что

NSRange(location: 0, length: 24) 

это автоматически сгенерированный метод инициализации структуры в Swift и

NSMakeRange(0, 24) 

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

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

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

person zvjerka24    schedule 07.12.2018