从Realm结果Swift

时间:2018-06-16 18:20:08

标签: swift string optional

我犹豫不决,因为我知道这可能是一个愚蠢的问题。

我正在返回一个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'

2 个答案:

答案 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。问题是lastRecordOptional,因此您必须解开lastRecord,而不是String(lastRecord?.time)的返回值。

if let lastRecord = lastRecord {
    previousRoundsLabel.text = "\(lastRecord.time)"
}