首页 > 解决方案 > 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

解决方案


闭包在 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)!)

推荐阅读