Swift NSCountedSet init有数组bug吗?

时间:2015-03-20 17:21:56

标签: ios xcode swift swift-playground

Swift Playground中似乎存在使用NSCountedSet的错误。

此代码按预期工作

let numbers = [1,2,2,4,6,7,8,8,5,8,1]

let set = NSSet(array: numbers)

但是当我尝试以相同的方式创建NSCountedSet时

var bag = NSCountedSet(array: numbers)

我收到此错误

  

游乐场执行失败:   /var/folders/bl/1tnlvfzd4mqb9gkpx0h8rxy00000gp/T/lldb/6514/playground599.swift:56:31:   错误:'Int'与'AnyObject'var bag =不同   NSCountedSet(数组:数字)

我确实尝试过输入数字

let nums = numbers as [AnyObject]
var bag = NSCountedSet(array: nums)

然后我收到此错误

  

游乐场执行失败:   /var/folders/bl/1tnlvfzd4mqb9gkpx0h8rxy00000gp/T/lldb/6514/playground732.swift:58:23:   错误:call var bag中的额外参数'array'= NSCountedSet(array:   NUMS)

我在这里错过了什么吗?

我可以通过这个来解决这个问题

var bag = NSCountedSet()
for number in numbers {
    bag.addObject(number)
}

但它不是很优雅

1 个答案:

答案 0 :(得分:8)

更新:正如@ carbo18报道的那样,这在Xcode 6.3 beta 4中得到了修复。

旧答案:这绝对看起来像个错误。 NSCountedSet有初始化程序

convenience init(array: [AnyObject])
convenience init(set: NSSet)

但是

let b1 = NSCountedSet(array: [])     // extra argument 'array' in call
let b2 = NSCountedSet(set: NSSet())  // extra argument 'set' in call

都无法编译。

Apple开发者论坛(https://devforums.apple.com/message/1081850#1081850)也报道了这一点, 其中给出了以下解决方法:

let numbers = [1,2,2,4,6,7,8,8,5,8,1]
let bag = NSCountedSet()
bag.addObjectsFromArray(numbers)