gpt4 book ai didi

ios - 字符串不是 () 的子类型

转载 作者:行者123 更新时间:2023-11-28 13:12:48 25 4
gpt4 key购买 nike

我试图创建一个可以输入参数但没有返回值的 block (类型 block 无效)。我们知道,一个没有参数,不返回任何东西的 block 的结构是这样的:

var block: () -> () = {
//Hello World goes here
}

如果 block 有参数,但不返回任何东西,我们可以使用这个命令:

var bloco7: (String) -> () = {
//Hello World goes here
}

但我们有两个问题:第一个是这段代码不起作用,第二个是只有当我们像这样调用一个临时变量时这段代码才有效:

var bloco7: (String) -> () = {
$0//I only need to call
//Hello World goes here and all the things OK
}

我想知道为什么会这样,似乎没有多大意义......

最佳答案

这里有两个部分。

首先,我们声明闭包的类型:

var bloco7: (String) -> ()

bloco7 是一个类型为 (String) -> () 的变量(一个接受字符串并返回 nil 的闭包。我们不要在这里定义参数的名称。参数是按所谓的“闭包文字语法”命名的。

所以,如果我们想要一个内联闭包,我们稍后可以:

var bloco7: (String) -> () = {
yourArgument in // <-- here we named the parameter, it's called 'yourArgument'
println(yourArgument)
}

但重要的是要注意,当我们声明 bloco7 及其类型时,我们并没有定义变量的名称。请记住,我们可以将方法和函数分配给闭包变量。

例如,给定这个函数:

func sayHello(name: String) -> Void {
println("Hello, " + name + "!")
}

我们实际上可以让 bloco7 指向这个函数:

bloco7 = sayHello

现在,下面两行实际上做了完全相同的事情:

sayHello("World")
bloco7("World")

这里重要的一点是参数名称与闭包的类型无关。参数名称是我们分配给变量的值的一部分,而不是其类型的一部分。

关于ios - 字符串不是 () 的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30677950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com