Swift:无法转换类型' Int16'预期的参数类型' AnyObject?'

时间:2016-07-31 16:48:18

标签: ios swift

我收到以下错误:

  

无法转换类型' Int16'的值预期参数类型' AnyObject?'

就行了

person.setValue(Time, forKey: "Time")

当我运行这个应用程序时。该函数的框架取自this tutorial,并从String更改为Int16,以及实体和属性名称。

var people = [NSManagedObject]()

   func saveName(Time: Int16) {
    //1
    let appDelegate =
        UIApplication.sharedApplication().delegate as! AppDelegate

    let managedContext = appDelegate.managedObjectContext

    //2
    let entity =  NSEntityDescription.entityForName("Person",
                                                    inManagedObjectContext:managedContext)

    let person = NSManagedObject(entity: entity!,
                                 insertIntoManagedObjectContext: managedContext)

    //3
    person.setValue(Time, forKey: "Time")

    //4
    do {
        try managedContext.save()
        //5
        people.append(person)
    } catch let error as NSError  {
        print("Could not save \(error), \(error.userInfo)")
    }
}

2 个答案:

答案 0 :(得分:3)

正如错误所说,Int16不是Swift中的对象,因此无法在需要对象的setValue(forKey:)中使用。尝试将其包装在NSNumber中,如下所示:

person.setValue(NSNumber(short: Time), forKey: "Time")

答案 1 :(得分:2)

如果你打算使用Int16,你不能像对象那样使用桥接数字类型直接将它作为对象交给Objective-C。 Swift数字不是Objective-C对象,除了像Int和Double这样的简单数字之外,Swift不会帮助你。对于Int16,必须将其作为NSNumber包装起来。