代码之家  ›  专栏  ›  技术社区  ›  nc14

从领域结果swift将int转换为字符串

  •  0
  • nc14  · 技术社区  · 7 年前

    我迟疑地问这个问题,因为我知道这可能是个愚蠢的问题。

    我正在返回一个领域的结果,然后继续尝试将其转换为一个字符串作为正常(放在一个文本标签)。

    但是我有个错误 '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 回复  |  直到 7 年前
        1
  •  1
  •   Dávid Pásztor    7 年前

    问题不是 String(lastRecord?.time) 存在 Optional . 问题是 lastRecord 存在 可选的 ,所以你必须打开包装 后期记录 ,而不是的返回值 字符串(上一个记录?时间) .

    if let lastRecord = lastRecord {
        previousRoundsLabel.text = "\(lastRecord.time)"
    }
    
        2
  •  1
  •   Smartcat    7 年前

    总结一下dvid psztor的回答,这里是 解决方法:

    previousTimeLabel.text = String(lastRecord?.time ?? 0)
    

    这可能不是申请的最佳方式。dvid的要点是,在试图将其time int传递给字符串初始值设定项之前,需要处理lastRecord可能为nil的问题。所以上面是一个简单的方法,如果你可以使用“0”字符串作为前一个TimeLabel的文本,如果没有LastRecord的话。