我正在尝试将属性字符串设置为按钮。
swift上这个函数的定义是这个
func setAttributedTitle(_ title: NSAttributedString!,
forState state: UIControlState)
所以我想我必须输入它像
myButton.setAttributedTitle(title:attrString, forState: UIControlState.Normal)
但正确的是
myButton.setAttributedTitle(attrString, forState: UIControlState.Normal)
为什么有必要提出forState:
而不是title
?我不明白。
顺便说一下func定义中下划线的含义是什么?
答案 0 :(得分:3)
因为这是方法参数在swift中的工作方式。我强调方法,因为这不适用于裸函数,即类范围外的func
定义。
默认情况下,第一个参数没有显式名称,而其他名称则是强制性的。
Swift中的方法与Objective-C中的方法非常相似。与在Objective-C中一样,Swift中方法的名称通常是指方法的第一个参数,它使用一个介词,例如with,for或by,如前面Counter类示例中的incrementBy方法所示。使用介词使得该方法在被调用时可以被读作句子。 Swift通过使用与方法参数不同的默认方法而不是函数参数,使得这种已建立的方法命名约定易于编写。
具体来说, Swift默认情况下在方法中为第一个参数名称提供本地参数名称,默认情况下为第二个和后续参数名称提供本地和外部参数名称。此约定与典型匹配编写Objective-C方法时您将熟悉的命名和调用约定,并且无需限定参数名称即可进行表达式方法调用。
下划线表示:此参数没有外部参数名称。对于方法的第一个参数,这是多余的,但您可以使用它来更改上面讨论的默认行为。
例如
class Foo {
func bar(a: String, b: Int) {}
func baz(a: String, _ b: Int) {}
}
将导致以下正确使用方法调用:
var f = Foo()
f.bar("hello", b: 1)
f.baz("hello", 1)
添加_
会使b
成为本地名称,因此您无法做到
f.baz("hello", b: 1)