NSNumber的?到String类型的值?在CoreData中

时间:2015-09-30 02:12:50

标签: ios core-data swift2

所以我无法解决这个问题,我是否应该更改“.text”#39;到别的什么或者我必须将字符串转换成双重字符串?

这是代码

if item != nil {
    // the errors I keep getting for each one is
    unitCost.text = item?.unitCost //cannot assign to a value 'NSNumber?' to a value of type 'String?'
    total.text = item?.total  //cannot assign to a value 'NSNumber?' to a value of type 'String?'
    date.text = item?.date //cannot assign to a value 'NSDate?' to a value of type 'String?'
}

5 个答案:

答案 0 :(得分:1)

您正在尝试为text属性分配无效类型。 text属性的类型为String?,如编译器错误所述。您正在尝试分配NSNumberNSDate。预期类型为Stringnil,因此您必须确保仅提供 这两种可能性。因此,您需要将数字和日期转换为字符串。

在Swift中,不需要使用格式说明符。相反,最佳做法是对数字这样的简单类型使用字符串插值:

unitCost.text = "\(item?.unitCost!)"
total.text    = "\(item?.total!)"

对于日期,您可以使用NSDateFormatter生成所需格式的人性化日期:

let formatter       = NSDateFormatter()
formatter.dateStyle = .MediumStyle

date.text           = "\(formatter.stringFromDate(date))"

虽然我们正在使用它,但为什么不使用可选绑定而不是nil比较:

if let item = item {
    // Set your properties here
}

答案 1 :(得分:0)

试试这个:

unitCost.text = String(format: "%d", item?.unitCost?.integerValue)

答案 2 :(得分:0)

您可以为Double / NSNumber / NSDate

添加扩展名
extension Double {
    func toString() -> String {
        return NSNumberFormatter().stringFromNumber(self) ?? ""
    }
}

extension NSNumber {
    func toString() -> String {
        return NSNumberFormatter().stringFromNumber(self) ?? ""
    }
}

var doubleValue: Double?
doubleValue?.toString()

如果未设置doubleValue,则返回空字符串。你可以让toString()返回String吗?太......取决于你需要什么

此外,您的代码中不需要item!= nil check,因为它是可选的。

答案 3 :(得分:0)

@dbart“\(item?.unitCost)”将可选值显示为String,如Optional(5)而不是5,我们需要打开值

答案 4 :(得分:-1)

检查此代码:

if let requiredItem = item {
unitCost.text = requiredItem.unitCost ? "\(requiredItem.unitCost)" : ""
total.text = requiredItem.total ? "\(requiredItem.total)" : ""
date.text = requiredItem.date ? "\(requiredItem.date)" : ""
}