当前位置: 首页 > 面试题库 >

如何替换position ++代码以使其与Swift 3兼容?

陆耀
2023-03-14
问题内容

我有以下类,它具有getNextToken迭代数组项的方法:

class Parser {
    let tokens: [Token]
    var position = 0

    init(tokens: [Token]) {
        self.tokens = tokens
    }

    func getNextToken() -> Token? {
        guard position < tokens.count else {
            return nil
        }
    return tokens[position++]
    }
}

但是我收到来自编译器的警告消息,在Swift 3中将弃用++

我应该如何重写我的代码以让方法在当前位置返回数组项并在此之后递增位置?

添加多行的标准建议position +=1不适合此处,因为我在评估时正完全退出示波器tokens[position++]


问题答案:

defer在计算返回值 之后 ,可用于递增position变量 : __

func getNextToken() -> Token? {
    guard position < tokens.count else {
        return nil
    }
    defer {
        position += 1
    }
    return tokens[position]
}


 类似资料:
  • 问题内容: 我曾经有一个可打电话的课 我曾经用来提交。如何更改使用? 以下代码无法编译 不存在变量U类型的实例,因此SampleTask符合Supplier 问题答案: 期望一个,而您给它一个。 错误消息告诉您,编译器已尝试找到用于“ 您的a”的类型,但找不到该类型。 Java将把lambda隐式“提升”到功能接口(例如或)。但是它不会将功能接口视为可互换的- 也就是说,您不能在期望的位置使用a

  • 问题内容: 我正在使用 EclipseLink的JAXB实现的一些非标准扩展,并且要启用该实现,必须使用jaxb.properties对其进行配置。效果很好。 但是,由于生成错误,属性文件未包含在正确的位置,从而导致使用默认的JAXB,该文件没有任何错误,只是继续解析XML文件,忽略了非标准扩展名,给我留下了一个非工作bean。 为了使它更加健壮,我想摆脱属性文件,并在代码中指定上下文配置。由于它

  • 我们计划将AEM版本从6.4迁移到6.5。我们如何确保当前的代码库(基于AEM 6.4构建)与AEM 6.5兼容? 模式检测器能帮上忙吗?我们是否有其他方法来确定AEM 6.4代码是否与AEM 6.5兼容

  • Liskov替代原则要求 子类型中的前提条件不能加强 任何人都可以发布一个违反上述每一点的例子和另一个解决这些问题的例子吗?

  • 我有这个密码: 还有很多if语句。我想用可选的替换它,但我不知道如何替换,因为我只是在研究这个主题。你能帮我吗?