创建NSManagedObjectModel时调用中的额外参数

时间:2015-01-19 16:57:19

标签: swift

我真的不明白为什么我的map方法出错了。该错误是调用中的额外参数。

这有效:

let url1 = NSURL(string: "123");
let url2 = NSURL(string: "456");
NSManagedObjectModel(contentsOfURL:url1!);

当我尝试将地图用于NSURL数组时,

func createModels(test: [NSURL]) -> [NSManagedObjectModel]  {
    let newData = test.map {
        (url) -> NSURL in
        NSManagedObjectModel(contentsOfURL: url!); // errors here
    }
    return newData
}

所以在第一个片段中,我知道我可以使用该方法调用创建NSManagedObjectModel。但是当我尝试使用NSURL数组的map函数时,它会在调用时给出一个额外参数的错误。有什么想法吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

映射闭包将URL作为参数返回模型, 签名应该是

(url: NSURL) -> NSManagedObjectModel

NSManagedObjectModel(contentsOfURL: url!); // errors here

错误,因为此处url不是可选的。另一方面, NSManagedObjectModel(contentsOfURL: url)返回一个可选项 需要打开包装。

把它放在一起:

func createModels(test: [NSURL]) -> [NSManagedObjectModel]  {
    let newData = test.map {
        (url: NSURL) -> NSManagedObjectModel in
        return NSManagedObjectModel(contentsOfURL: url)!
    }
    return newData
}

或使用速记参数表示法:

func createModels(test: [NSURL]) -> [NSManagedObjectModel]  {
    let newData = test.map {
        NSManagedObjectModel(contentsOfURL: $0)!
    }
    return newData
}