所以我无法解决这个问题,我是否应该更改“.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?'
}
答案 0 :(得分:1)
您正在尝试为text
属性分配无效类型。 text属性的类型为String?
,如编译器错误所述。您正在尝试分配NSNumber
或NSDate
。预期类型为String
或nil
,因此您必须确保仅提供 这两种可能性。因此,您需要将数字和日期转换为字符串。
在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)" : ""
}