【问题标题】:Set attributed text to UIButton将属性文本设置为 UIButton
【发布时间】:2014-06-10 18:09:28
【问题描述】:

我正在尝试为按钮设置属性字符串。

这个函数在swift上的定义是这样的

func setAttributedTitle(_ title: NSAttributedString!,
               forState state: UIControlState)

所以我想我必须像这样输入它

myButton.setAttributedTitle(title:attrString, forState: UIControlState.Normal)

但正确的是

myButton.setAttributedTitle(attrString, forState: UIControlState.Normal)

为什么必须放forState: 而不是title?我不明白。

顺便说一句,func 定义上的下划线是什么意思?

【问题讨论】:

    标签: uibutton swift nsattributedstring


    【解决方案1】:

    因为这就是 methods 参数在 swift 中的工作方式。我强调方法,因为这不适用于裸函数,即类范围之外的func 定义。

    默认情况下,第一个参数没有明确的名称,而对于其他参数是强制性的。

    来自official guide

    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)
    

    【讨论】:

    • 然后告诉我为什么var attrString = NSAttributedString("Hello World", attributes:dictAttributes) 不起作用而var attrString = NSAttributedString(string: "Hello World", attributes:dictAttributes) 起作用。
    • 因为那不是一种方法。它是一个函数,它有不同的默认规则。
    • 啊...你能把这句话翻译成英文吗? this parameter has no external parameter name
    • 很确定你的例子不起作用,因为它是一个类初始化器,它遵循与方法不同的规则。 “外部参数”也意味着,定义没有定义外部参数。阅读语言定义,因为这是一个精确的术语。
    • @RubberDuck 外部参数名称是用于命名传递给方法的参数的名称,例如 forStateforState 是函数的本地和外部参数名称。您可以在官方指南中找到很多相关信息。
    猜你喜欢
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 2010-12-31
    相关资源
    最近更新 更多