let myArray = Array(arrayLiteral: userIDs)
let newArray = myArray.map{$0 as! UInt}
下面的错误是什么意思?
Cast from 'Set?' to unrelated type 'UInt' always fails
我想将从 NSSet
创建的数组转换为使用 UInt
而不是数字的数组。
最佳答案
如果userIDs
是Set<NSNumber>
然后做 Array(arrayLiteral: userIDs)
不会根据集合内容创建数组,它会创建一个包含集合本身的数组。
删除 arrayLiteral
初始化:
let num1 = NSNumber(integer: 33)
let num2 = NSNumber(integer: 42)
let num3 = NSNumber(integer: 33)
let nums = [num1, num2, num3] // [33, 42, 33]
let userIDs = Set(nums) // {33, 42}
let myArray = Array(userIDs) // [33, 42]
然后你可以映射到任何你想要的:
let newArray = myArray.map{ UInt($0) }
发表评论后更新
如果你有 Foundation 的 NSSet 而不是 Swift 的 Set,你可以这样做:
let userIDs = NSSet(array: nums)
let myArray = userIDs.map { $0 as! NSNumber }
let newArray = myArray.map { UInt($0) }
我们必须将 NSSet 的内容向下转换为 NSNumber,因为 NSSet 不保留元素的类型。
关于Swift array.map 将 NSNumber 转换为 UInt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36838874/