swift - Swift:使用闭包添加 2 个数字的程序
问题描述
let fileName = ProcessInfo.processInfo.environment["OUTPUT_PATH"]!
FileManager.default.createFile(atPath: fileName, contents: nil, attributes: nil)
let fileHandle = FileHandle(forWritingAtPath: fileName)!
guard let number1 = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!)
else { fatalError("Bad input") }
guard let number2 = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!)
else { fatalError("Bad input") }
let res = let closure(number1: number1, number2: number2)
fileHandle.write(String(res).data(using: .utf8)!)
fileHandle.write("\n".data(using: .utf8)!)
这是给定的问题。想要res中的加法和,这样res就可以打印出来了。我是新来的。请帮忙。在不修改问题的情况下要编写的额外代码是什么?
尝试了以下解决方案:
if let res = closure(number1: number1, number2: number2){
return number1+number2
}
和:
func closure(number1: Int, number2: Int) -> Int {
return number1 + number2
}
收到以下错误:
solution.swift:23:11:错误:'='之后的预期初始值 让 res = 让闭包(number1:number1,number2:number2) ^ solution.swift:23:10:错误:一行上的连续语句必须用';'分隔 让 res = 让闭包(number1:number1,number2:number2) ^ ; solution.swift:23:22:错误:一行上的连续语句必须用';'分隔 让 res = 让闭包(number1:number1,number2:number2) ^ ; solution.swift:23:15:错误:模式中缺少类型注释 让 res = 让闭包(number1:number1,number2:number2) ^ solution.swift:23:22: 警告: '(number1: Int, number2: Int)' 类型的表达式未使用 让 res = 让闭包(number1:number1,number2:number2)
解决方案
闭包在 Swift 中非常简单。这是一个将两个数字相加的闭包示例:
let closure:((Int, Int) -> Int) = { (number1, number2) in
return number1 + number2
}
就像使用普通变量一样,您可以在冒号之后设置闭包的类型。在这种情况下,它是:
((Int, Int) -> Int)
这意味着:将两个 Int 作为参数并返回一个 Int。
用法:
let firstNumber = 5
let secondNumber = 6
let additionResult = closure(firstNumber, secondNumber)
//additionResult is 11
在您的特定用例中:
let closure:((Int, Int) -> Int) = { (number1, number2) in
return number1 + number2
}
let fileName = ProcessInfo.processInfo.environment["OUTPUT_PATH"]!
FileManager.default.createFile(atPath: fileName, contents: nil, attributes: nil)
let fileHandle = FileHandle(forWritingAtPath: fileName)!
guard let number1 = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!)
else { fatalError("Bad input") }
guard let number2 = Int((readLine()?.trimmingCharacters(in: .whitespacesAndNewlines))!)
else { fatalError("Bad input") }
let res = closure(number1, number2)
fileHandle.write(String(res).data(using: .utf8)!)
fileHandle.write("\n".data(using: .utf8)!)
推荐阅读
- c++ - 优雅的互斥锁开关功能?
- dart - 如何在 Flutter 中更改文件扩展名?
- php - 无法在 HTML 表单中实现 reCaptcha
- angularjs - 如何用 .then() 替换所有 .success() 和 .error() 调用?
- php - 节点 mcu 获取数据未知
- android - 可以从扩展 Java 中的 RealmObject 的类进行扩展吗?
- javascript - 如何在jquery中订购号码?
- c++ - 为覆盆子 pi3 arm64 构建 qt
- node.js - web3.js:函数 web3.eth.Contract(abi, address) 未能启动合约实例
- octave - 是否有可能获得不同文件的平均值以进行一些计算?