NSRange和NSMakeRange之间的区别

问题描述 投票:23回答:2

之间有什么区别:

NSRange(location: 0, length: 5)

和:

NSMakeRange(0, 5)

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

谢谢您的帮助 :-)

swift nsrange swiftlint
2个回答
31
投票

他们之间的唯一区别是

NSRange(location: 0, length: 5)

NSRange的初始化器

NSMakeRange(0, 5)

是一个创建一个新的NSRange实例的函数(通过在最可能的内部使用相同的初始化器)并且实际上在Swift中是多余的。 Swift简单地从Objective-C继承了它。我会坚持前者


1
投票

主要区别在于

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

© www.soinside.com 2019 - 2024. All rights reserved.