2015-08-28 45 views
0

任何人都可以使此代碼更好?我的問題在於,我想要「protein,khfat」爲optionals。但NSNumber將不接受可選項作爲參數。所以我必須做到這一點非常醜陋的東西。有沒有更好的辦法?如何使NSNumber接受選項

@IBAction func save(){ 
    if nameLabel.text.isEmpty { 
     Toast.showToast("Name cannot be empty.", view: view) 
    } else { 
     let kcal = kcalLabel.text.toInt() 
     let protein = proteinLabel.text.toDouble() // returns Double? 
     let kh = khLabel.text.toDouble() // returns Double? 
     let fat = fatLabel.text.toDouble() // returns Double? 
     foodItem.name = nameLabel.text 
     foodItem.kcal = kcal == nil ? nil : NSNumber(integer: kcal!) 
     foodItem.protein = protein == nil ? nil : NSNumber(double: protein!) 
     foodItem.kh = kh == nil ? nil : NSNumber(double: kh!) 
     foodItem.fat = fat == nil ? nil : NSNumber(double: fat!) 
     foodItem.remarks = remarksLabel.text 
     foodItem.requireUpdate = NSNumber(bool: true) 
     foodItem.isdeleted = NSNumber(bool: false) 
     delegate.addFoodItemViewController(self, didAddFoodItem: foodItem) 
     Toast.showToast("FoodItem saved.", view: view) 
    } 
} 

這裏是模型:

class FoodItem: NSManagedObject { 

    @NSManaged var name: String 
    @NSManaged var kcal: NSNumber? 
    @NSManaged var kh: NSNumber? 
    @NSManaged var protein: NSNumber? 
    @NSManaged var fat: NSNumber? 
    @NSManaged var remarks: String? 
    @NSManaged var isdeleted: NSNumber 
    @NSManaged var requireUpdate: NSNumber 
    @NSManaged var displayOrder: NSNumber 
    @NSManaged var uid: String? 

} 
+0

的NSNumber是objC類型,而可選項是在Swift中提供的,並且不使用objC ...不能你只是將NSNumber轉換爲雙例如,可選地展開值? –

回答

2

你可以添加一對夫婦的擴展方法來清理語法位:

extension Int { 
    func toNSNumber() -> NSNumber { 
     return NSNumber(integer: self) 
    } 
} 

extension Double { 
    func toNSNumber() -> NSNumber { 
     return NSNumber(double: self) 
    } 
} 

然後:

foodItem.kcal = kcal?.toNSNumber() 
foodItem.protein = protein?.toNSNumber()