我有这个功能:
func doStuff(stuff: Int...) {
print(stuff)
}
我这样调用它:
let array = [1, 2, 3]
doStuff(array)
它不编译!
我的意思是,这没有意义,对吧?该函数应该接受一个事物列表,而我正在给它一个事物列表。为什么这不起作用?
这里是一些背景信息(你可以跳过)
我有这个 NSManagedObject
子类:
class Entry: NSManagedObject {
override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) {
// irrelevent
}
convenience init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext, title: String, content: String, date: NSDate) {
// irrelevent
}
}
extension Entry {
@NSManaged var content: String?
@NSManaged var date: NSDate?
@NSManaged var title: String?
}
在我的一个 View Controller 中,我获取了 viewDidLoad
中的所有 Entry
,并将获取的内容存储在一个名为 anyObjs
的变量中类型为 [AnyObject]
我想将此 [AnyObject]
转换为 [NSDate: Entry]
,其中键是值的 date
属性。我想要这样,以便使用 NSDate
轻松访问 Entry
。
所以我尝试了以下方法:
let literal = anyObjs!.map { (($0 as! Entry).date!, $0 as! Entry) }
entries = [NSDate: Entry](dictionaryLiteral: literal)
我发现我无法将 [(NSDate, Entry)]
传递给 (NSDate, Entry)...
!
“这很简单”您可能会说,“只需使用下标将数组中的所有元素作为可变参数传递即可!”
doStuff(array[0], array[1], array[2])
但如果我不知道有多少项,这就不起作用。
另一种不起作用的解决方法是创建一个接受数组的函数:
func doStuff(array: [Int]) {
print(array)
}
这也行不通,因为如果我不知道该函数的确切实现,我就无法在新函数中重写它。
我能做什么?
最佳答案
你是对的!应该有一种从元组数组中获取字典的方法。
extension Dictionary {
init(tuples: [Element]) {
self.init()
for (key, value) in tuples {
self.updateValue(value, forKey: key)
}
}
}
好了,说完了,让我们看看。
let tuples = anyObjs!.map { (($0 as! Entry).date!, $0 as! Entry) }
let entries = [NSDate: Entry](tuples: tuples)
或者将两行合并
let entries = [NSDate: Entry](tuples: anyObjs!.map { (($0 as! Entry).date!, $0 as! Entry) })
关于arrays - 为什么我不能在 Swift 中将数组传递给可变参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37625415/