Swift: Kann den Wert vom Typ "Int16" nicht in den erwarteten Argumenttyp "AnyObject" konvertieren? [Duplikat] - Ios, schnell

Ich erhalte den folgenden Fehler:

Der Wert des Typs "Int16" kann nicht in den erwarteten Argumenttyp "AnyObject?" Konvertiert werden.

an der Leitung

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

wenn ich diese App starte. Der Rahmen der Funktion wurde übernommen dieses Tutorial und geändert von String zu Int16sowie die Entitäts- und Attributnamen.

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)")
}
}

Antworten:

3 für die Antwort № 1

Wie der Fehler sagt, Int16 Es ist kein Objekt in Swift und kann daher nicht verwendet werden setValue(forKey:), die ein Objekt erwartet. Versuchen Sie es in einem NSNumber, so:

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

2 für die Antwort № 2

Wenn Sie einen Int16 verwenden, können Sie nicht übergebendas geht direkt auf Objective-C als Objekt, so wie man es mit überbrückten Zahlentypen wie Int. Schnelle Zahlen sind keine Objective-C-Objekte und Swift wird dir nicht helfen, außer mit einfachen Zahlen wie Int und Double. Für ein Int16, Sie muss es selbst als NSNummer einpacken.


Verwandte Fragen
Speisekarte