我犹豫不决,因为我知道这可能是一个愚蠢的问题。
我正在返回一个Realm结果,然后继续尝试将其转换为正常的String(放入文本标签)。
但是我收到错误'init' has been renamed to 'init(describing:)'
。
当我尝试使用描述方法时,标签会在其中打印"Optional"
,这显然不是我想要的。
我有什么理由不能使用:
previousTimeLabel.text = String(lastRecord?.time)
我确定我之前已经做过这件事并且很好,我错过了什么吗? (lastRecord.time
是一个Int)。
我在这里检查了关于插值Swift String Interpolation displaying optional?的答案并尝试改为这样:
if let previousRounds = String(lastRecord?.rounds) {
previousRoundsLabel.text = previousRounds
}
但得到相同的错误+ Initializer for conditional binding must have Optional type, not 'String'
答案 0 :(得分:1)
总结一下DávidPásztor的回答,这是一种方式,你可以解决它:
previousTimeLabel.text = String(lastRecord?.time ?? 0)
这可能不是您的应用程序的最佳方式。 Dávid提出的要点是,在尝试将其时间Int传递给String初始值设定项之前,您需要处理lastRecord可能为nil。所以上面是一个简单的方法,如果没有lastRecord就可以将“0”字符串作为previousTimeLabel的文本。
答案 1 :(得分:1)
问题不是String(lastRecord?.time)
Optional
。问题是lastRecord
为Optional
,因此您必须解开lastRecord
,而不是String(lastRecord?.time)
的返回值。
if let lastRecord = lastRecord {
previousRoundsLabel.text = "\(lastRecord.time)"
}