使用其他值初始化swift中的属性

问题描述:

是否可以使用其他值/属性(例如, UIButton,UILabel,...?使用其他值初始化swift中的属性

我很想有这样的事情:

let myLabel = UILabel() { 
    font = UIFont(...) 
    textColor = ... 
    ... 
} 

这是一个不错的功能,在C#中可用的(也可能是其他语言),但在迅疾不幸的是不可用的 - 我想不出任何解决方法来模仿该行为。

不知道这是否会工作,但你可以用didSet方法

let myLabel = UILabel() { 
    didSet { 
     myLabel.font = UIFont(...) 
     myLabel.textColor = UIColor.blackColor() 
    } 
} 
+0

似乎并没有工作,不幸的是 – swalkner 2015-02-07 11:36:28

您可以与您返回声明类型的值封闭初始化尝试,并与()执行它:

let myLabel: UILabel = { 
    let theLabel = UILabel() 
    theLabel.font = UIFont(...) 
    theLabel.textColor = ... 
    ... 
    return theLabel 
}() 

请注意,你必须之前=

+0

通过这是很常见的使用常量的这个声明定义了您的应用的生命周期内保持不变全球单的方式。例如核心数据帮手。全局常量如上所述,保证被懒惰地实例化。 – 2015-02-07 12:14:31

如何像这样明确地声明值类型?

func config<T>(obj: T, configure: T -> Void) -> T { 
    configure(obj) 
    return obj 
} 

let myLabel = config(UILabel(...)) { 
    $0.font = UIFont(...) 
    $0.textColor = ... 
    ... 
} 
+0

注册,但配置不是一个动词,它应该返回(),而不是任何。 – Jessy 2015-02-07 17:34:08

+0

@Jessy使其返回'Any'允许具有非''void'返回类型的单表达式闭包,因为其他类型不会隐式转换为'Void'。 – 2015-02-09 08:59:57

+0

我不认为配置应该返回任何东西,但如果必须的话,那么你可以使用另一个通用的参数类型。没有值的元组与其他语言中的void不同,因为它实际上是一个值。任何应该被认为是无用的,除非你使用Objective-C代码。 – Jessy 2015-02-09 13:12:01