我有这个函数:
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?
}
在我的一个视图控制器中,我在
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)
}
这也不行,因为如果我不知道函数的确切实现方式,就无法在新函数中重写它。
我该怎么办?