首页 > 解决方案 > 从函数返回闭包——(期望 2 个参数,但 1 在闭包体中使用)

问题描述

我刚刚开始学习 SwiftUI。我想知道是否有人可以给我一个建议。

我很难理解为什么下面的代码有错误,但如果我改为print("I'm driving to \($1)."). 在这里使用有什么问题\($0)?似乎没有问题print("I'm cycling \($0) to \($1).")

import SwiftUI

func createTravelMethod(distance: Int) -> (String, String) -> Void {
    if distance < 5 {
        return {
                print("I'm walking to \($1).")
        }
    } else if distance < 20 {
        return {
            print("I'm cycling \($0) to \($1).")
        }
    } else {
        return {
            print("I'm driving to \($0).")
        }
    }
}
let travelMethod = createTravelMethod(distance: 15)
travelMethod("London", "Paris")

标签: swift

解决方案


尝试这个:

import SwiftUI

func createTravelMethod(distance: Int) -> (String, String) -> Void {
    if distance < 5 {
        return {
                print("I'm walking to \($1).")
        }
    } else if distance < 20 {
        return { a, b in
            print("I'm cycling \(a) to \(b).")
        }
    } else {
        return { a, b in
            print("I'm driving to \(a).")
        }
    }
}
let travelMethod = createTravelMethod(distance: 15)
travelMethod("London", "Paris")

或这个:

func createTravelMethod(distance: Int) -> (String, String) -> Void {

    return {
        if distance < 5 {
            print("I'm walking to \($1).")

        } else if distance < 20 {
            print("I'm cycling \($0) to \($1).")
        } else {
            print("I'm driving to \($0).")
        }
    }
}
let travelMethod = createTravelMethod(distance: 15)
travelMethod("London", "Paris")

推荐阅读