30

有什么区别:

NSRange(location: 0, length: 5)

和:

NSMakeRange(0, 5)

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

谢谢您的帮助 :-)

4

2 回答 2

39

它们之间的唯一区别是

NSRange(location: 0, length: 5)

NSRangewhile的初始化器

NSMakeRange(0, 5)

是一个创建新NSRange实例的函数(很可能通过在内部使用相同的初始化程序),实际上在Swift. Swift只是从Objective-C. 我会坚持前者

于 2017-06-13T13:27:57.920 回答
7

主要区别在于

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 代码,使用第二个;)

于 2018-12-07T04:50:30.490 回答