- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑这些行:
我创建了一个基于 NSButton
的类:
typealias onClickHandler = (NSTextfieldSuper)->Void
var onClick: onClickHandler?
当用户点击该按钮的一个实例时,我会这样做:
if (self.onClick != nil) {
onClick?(self)
}
稍后我会在另一个类(class)使用那个按钮:
let button = SuperButton()
button.onClick = { (textField: NSTextfieldSuper)->Void in
}
我不确定这是否是正确的语法。我想处理从创建按钮的父类的第一个闭包发送的按钮。
这是我能够在没有 Xcode 提示的情况下输入的唯一形式。如果这是正确的,那么 ->Void
的目的是什么?这可能会返回什么?
我只想处理发送的那个按钮。
顺便说一下,作为奖励,我必须用这个初始化几个按钮,所有按钮都运行相同的功能。做类似的事情会很好
func doSomething () {
}
然后
let button = SuperButton()
button.onClick = doSomething
有什么想法吗?
最佳答案
This was the only form I was able to type this without Xcode complaining. If this is correct, what is the purpose of this
->Void
there? What could this possibly returning?
它与您的 typealias
相同,在 Swift 中,函数类型具有以下形式:
(parameter definitions) -> return type
不返回任何内容的函数的返回类型为 Void
(类似于 C)。闭包表达式的完整形式是:
{ (
parameter definitions) ->
return typein
body}
在没有任何推断的情况下,此表达式提供了闭包的完整类型,并且示例中的 -> Void
返回类型指定您的闭包不返回任何内容。在您的作业中,将在编译时检查此完整类型以符合 onClick
的类型。
现在 Swift 会推断出很多东西,并且有各种可用于闭包表达式的简写形式,你会发现 Swift 接受:
button.onClick = { textField in }
这里也推断了闭包的参数和返回类型。
By the way, as a bonus, [...] any ideas?
只需使类型匹配:
func doSomething(textField : NSTextfieldSuper) { }
button.onClick = doSomething
与 (Objective-)C 不同,函数和闭包(C 中的 block )是可以互换的(因为它们在许多其他语言中,C 在这里很奇怪)
HTH
关于ios - 这是我在 Swift 中不明白的一件事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56841769/
我是一名优秀的程序员,十分优秀!