web-dev-qa-db-fra.com

Différence entre NSRange et NSMakeRange

Y a-t-il une différence entre: 

NSRange(location: 0, length: 5)

et:

NSMakeRange(0, 5)

Parce que Swiftlint jette un avertissement lorsque j'utilise NSMakeRange, mais je ne sais pas pourquoi.

Merci pour l'aide :-) 

21
auryn31

La seule différence entre eux est que

NSRange(location: 0, length: 5)

est un constructeur pour NSRange tant que 

NSMakeRange(0, 5)

est une fonction qui crée une nouvelle instance NSRange (en utilisant très probablement le même constructeur) et qui est en fait redondante dans Swift je pense. Swift l'a simplement hérité de Objective-C. Je m'en tiendrais à l'ancien

25
Andrey Chernukha

La principale différence est que 

NSRange(location: 0, length: 24) 

est une méthode struct init auto-générée dans Swift et 

NSMakeRange(0, 24) 

est juste une macro prédéfinie qui définit l'emplacement et la longueur

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

En général, le résultat est le même, mais si vous êtes Swift, utilisez le premier et si vous écrivez du code ObjC, utilisez le second;)

0
zvjerka24