为什么可以用负数初始化IndexSet?

时间:2018-09-04 20:14:14

标签: swift

关于IndexSet的{​​{3}}说:

  

有效整数值的范围是0..<INT_MAX-1。任何超出此范围的都属于错误。

但是此代码可以正常工作:

let indexSet = IndexSet(integer: -1)

如果我们尝试使用-2,它将导致崩溃。

为什么会这样?是错误还是我错过了什么?

在Xcode 9.4.1和Swift 4.1上进行了测试。

1 个答案:

答案 0 :(得分:1)

这是一个错误。其原因是@ManyToMany(mappedBy = "drawings", cascade = CascadeType.ALL) @LazyCollection(LazyCollectionOption.FALSE) private List<Bookmark> bookmarks; 的初始化程序是不可行的。 Here是标准库中定义的初始化程序:

IndexSet

使用无符号整数应该是与定义一致的方法:

  

有效整数值的范围是/// Initialize an `IndexSet` with a single integer. public init(integer: Element) { _handle = _MutablePairHandle(NSIndexSet(index: integer), copying: false) } 。外面的东西   这个范围是错误的。

为了安全起见,您可以使用此扩展名

0..<INT_MAX-1

因此,当您尝试使用负整数初始化IndexSet时,它将给您正确的错误消息:

extension IndexSet {
    public init(unsignedInt: UInt) {
        self = IndexSet(integer: Int(unsignedInt))
    }
}