NSRange和NSMakeRange之间的区别

aur*_*n31 25 nsrange swift swiftlint

之间有什么区别:

NSRange(location: 0, length: 5)
Run Code Online (Sandbox Code Playgroud)

和:

NSMakeRange(0, 5)
Run Code Online (Sandbox Code Playgroud)

因为Swiftlint我使用时会发出警告NSMakeRange,但我不知道为什么.

谢谢您的帮助 :-)

And*_*kha 32

他们之间的唯一区别是

NSRange(location: 0, length: 5)
Run Code Online (Sandbox Code Playgroud)

是一个构造NSRange,而

NSMakeRange(0, 5)
Run Code Online (Sandbox Code Playgroud)

是一个创建新NSRange实例的函数(通过最有可能使用相同的构造函数),实际上Swift我认为是多余的.Swift简单地从中继承了它Objective-C.我会坚持前者


zvj*_*a24 7

主要区别在于

NSRange(location: 0, length: 24) 
Run Code Online (Sandbox Code Playgroud)

是 Swift 中自动生成的 struct init 方法和

NSMakeRange(0, 24) 
Run Code Online (Sandbox Code Playgroud)

只是一个设置位置和长度的预定义宏

NS_INLINE NSRange NSMakeRange(NSUInteger loc, NSUInteger len) {
    NSRange r;
    r.location = loc;
    r.length = len;
    return r;
}
Run Code Online (Sandbox Code Playgroud)

一般来说,结果是一样的,但如果你是 Swift 使用第一个,如果你正在编写 ObjC 代码使用第二个 ;)