【问题标题】:Argument type 'String?' does not conform to expected type 'StringProtocol'参数类型“字符串?”不符合预期的类型“StringProtocol”
【发布时间】:2020-06-21 16:30:58
【问题描述】:

当在Swift 5 中的String 上使用compare 时会出现此错误,它只接受StringProtocol,但我想在String 上使用它,但无处可做。

我已经搜索了所有内容,但无法理解似乎是什么问题。

【问题讨论】:

    标签: ios swift string string-comparison swift5


    【解决方案1】:

    Optional<String>(又名String?)不符合StringProtocol(这是有道理的)的问题。你应该打开可选的,有几种方法:

    1. if let/guard 解包 (if let version = dbData?.version { //compare })
    2. 提供默认值(`(dbData?.version ?? "")),不推荐,因为它会提供不必要的冲突
    3. 强制解包dbData!.version,强烈不建议这样做,因为如果 Optional 是nil,它可能会导致应用程序崩溃

    【讨论】:

    • 使用 Optional 的地图功能是另一种有用的方法。像dbData?.version.map { version.compare($0, options: .caseInsensitive, range: nil, locale: nil) } 这样的东西,你只能在值不为零时进行比较,并且你可以提供一个默认值,在它的末尾使用?? 可能更有意义。
    • @Helam 完美的建议,但我觉得它有点不自然,虽然我喜欢函数式方法。还是点个赞吧,哥们!
    • 完美答案。但我不明白为什么苹果不写一个关于警告的正常帮助以便人们理解?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多