【问题标题】:Reference to member 'subscript' cannot be resolved without a contextual type如果没有上下文类型,则无法解析对成员“下标”的引用
【发布时间】:2020-11-17 18:55:27
【问题描述】:

我需要将字符串数组转换为整数。

import UIKit

var test = ["1", "2"]
let test1 = Int(test)[0]
let test2 = Int(test)[1]
print(test1 + test2)

^ 这是我正在尝试做的基本想法,但我得到“没有上下文类型就无法解决对成员'下标'的引用”。这甚至可能吗?

【问题讨论】:

    标签: swift xcode swift5


    【解决方案1】:

    尝试在test 数组上使用下标,而不是在Int 初始化器的结果上:

    var test = ["1", "2"]
    let test1 = Int(test[0])
    let test2 = Int(test[1])
    

    但是,您可以以更快速的方式实现您的目标:

    var test = ["1", "2"]
    print(test.compactMap(Int.init).reduce(0, +))
    

    或者只用reduce(_:_:):

    var test = ["1", "2"]
    print(test.reduce(0) { $0 + (Int($1) ?? .zero) })
    

    【讨论】:

    • 或单次迭代test.reduce(0){ $0 + (Int($1) ?? .zero)}
    • @LeoDabus 嗯,这样更好。谢谢。
    • 为什么要在这里使用.zero 而不是0?
    • @Clashsoft 在这种情况下没有区别。 .zero 仅在实际类型未知时才需要 stackoverflow.com/a/58420510/2303865。我更喜欢使用 .zero 而不是 0 只是为了更好的可读性。事实上,这只是我的看法。使用任何你觉得舒服的东西。
    猜你喜欢
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 2022-11-01
    • 2021-06-05
    • 2016-07-08
    • 1970-01-01
    相关资源
    最近更新 更多