【问题标题】:Swift NSCountedSet init with array bug?带有数组错误的 Swift NSCountedSet 初始化?
【发布时间】:2015-05-24 04:58:35
【问题描述】:

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: 错误:调用 var bag = NSCountedSet(array: 数)

我错过了什么吗?

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

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

但不是很优雅

【问题讨论】:

  • 这确实很奇怪。 let bag = NSCountedSet(array: [])let bag = NSCountedSet(set: set) 也不编译。向 Apple 发送错误报告!
  • 发送了错误报告。谢谢
  • 以上代码在 Xcode 6.3 beta 4 的 Playground 中不再失败。

标签: ios xcode swift swift-playground


【解决方案1】:

更新:正如@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)

【讨论】:

  • 上述问题是 Xcode 6.2 的一个错误,已在 Xcode 6.3 Beta 4 中修复
  • 很奇怪,在 6.4 (6E35b) 中仍然是一个错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多