如何在不创建额外变量的情况下处理此错误?

func reduceToZero(x:Int) -> Int {
    while (x != 0) {
        x = x-1            // ERROR: cannot assign to 'let' value 'x'
    }
    return x
}

我不想仅仅为了存储x的值而创建额外的变量.有可能实现我想要的吗?

推荐答案

如其他答案所述,从Swift 3开始,在不推荐使用变量之前放置var.尽管在其他答案中没有说明,但是可以声明inout个参数.思考:传递一个指针.

func reduceToZero(_ x: inout Int) {
    while (x != 0) {
        x = x-1     
    }
}

var a = 3
reduceToZero(&a)
print(a) // will print '0'

这在递归中特别有用.

苹果的inout条声明指南可以在here页上找到.

Swift相关问答推荐

如何模拟可以立即返回和/或与Deliverc/await同步返回的CompletionButtons风格代码?

如何避免使用DispatchSemaphores时线程爆炸?

启用完整并发判断以及如何解决警告

在SWIFT中使用Objective-C struct 时出错(在作用域中找不到类型)

如何才能在同一线程上调用类中的每个方法,而不对每个调用使用同步块?

如何使用模型在 SwiftUI 的列表中进行搜索

Swift Property Wrappers-Initialization 失败并显示无法将‘Double’类型的值转换为预期的参数类型

如何从 Swift 中隐藏 Objective-C 类接口的一部分?

覆盖一个子元素的 HStack 对齐方式

为什么 id 不能通过 struct 从 Objective-C 移植到 Swift?

SwiftUI View .tint(_ Color) 方法不起作用

引用类型(类)不需要但 struct 需要的可识别 id

展开 List 中的 HStack 以端到端但不是从上到下,因此看起来项目之间有更宽的空间

我如何从 UIAlertController 导航到新屏幕(swiftUI)

Swift 读写图片占用大量内存

如何使用 Date.ParseStrategy 在 Swift 5.6 中将字符串解析为日期?

Xcode 7.3 Swift 的语法高亮和代码完成问题

如何从 UITableViewCell 类中引用 UITableViewController?

WKWebView 确实从本地文档文件夹加载资源

显示 UIAlertController 的简单 App Delegate 方法(在 Swift 中)