web-dev-qa-db-ja.com

NSRangeとNSMakeRangeの違い

違いはありますか:

NSRange(location: 0, length: 5)

そして:

NSMakeRange(0, 5)

なぜなら、Swiftlintは、NSMakeRangeを使用すると警告をスローしますが、理由はわかりません。

助けてくれてありがとう :-)

25
auryn31

それらの間の唯一の違いは、

NSRange(location: 0, length: 5)

NSRangeの初期化子ですが、

NSMakeRange(0, 5)

新しいNSRangeインスタンスを作成する関数で(内部で同じイニシャライザを使用する可能性が高い)、実際にはSwiftで冗長です。 Swiftは単にObjective-Cから継承しています。前者に固執する

32

主な違いは

NSRange(location: 0, length: 24) 

Swiftの自動生成されたstruct initメソッドであり、

NSMakeRange(0, 24) 

場所と長さを設定する定義済みのマクロです

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

一般的に、結果は同じですが、Swiftを最初に使用し、ObjCコードを作成している場合は2番目を使用します;)

3
zvjerka24