2015-02-07 34 views

回答

2

這是一個不錯的功能,在C#中可用的(也可能是其他語言),但在迅疾不幸的是不可用的 - 我想不出任何解決方法來模仿該行爲。

0

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

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

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

0

您可以與您返回聲明類型的值封閉初始化嘗試,並與()執行它:

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

請注意,你必須之前=

+0

通過這是很常見的使用常量的這個聲明定義了您的應用的生命週期內保持不變全球單的方式。例如核心數據幫手。全局常量如上所述,保證被懶惰地實例化。 – 2015-02-07 12:14:31

1

如何像這樣明確地聲明值類型?

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