2015-09-09 3 views
0

ObjCSwift эквивалент ":"

[MyObject doThisWithString:string?: [MyObject otherString]]; 

Как я могу сделать это в Swift?

extension MyObject { 
    func doThisWithString(string: String?) { 
     ... <- assume defined 
    } 

    func otherString() -> String { 
     return ... <- assume defined 
    } 
} 

var MyInstance: MyObject 
... 
MyInstance.doThisWithString(myStringVar?: MyInstance.otherString()) <- how do I do this? 
+0

Оператор '?:' - это сокращенный синтаксис для троичного. Полный синтаксис будет 'string? string: [MyObject otherString] '. –

+0

проверить этот документ ... http: //nshipster.com/swift-operators/ –

ответ

6

Существует «??» оператор, называемый оператором 'Nil coalescing'. Он делает то, что вам нужно. Цитирую documentation:

Nil коалесцирующем Оператор

Ниль оператор коалесцирующий (а ?? б) разворачивает опциональный а, если она содержит значение, или возвращает значение по умолчанию, если б равен нулю. Выражение a всегда имеет необязательный тип. Выражение b должно соответствовать типу, который хранится внутри a.

Ниль оператора коалесцирующего представляет собой сокращенный код ниже:

а = ноль? а! : Б

В вашем случае, вы можете написать выражение как:

MyInstance.doThisWithString(myStringVar ?? MyInstance.otherString()) 
0

Swift обеспечивает очень простое решение для этого. Nil Coalescing Operator или ??

Nil Coalescing Operator в основном пытается предоставить некоторое значение по умолчанию для необязательного, так что вам не нужно принудительно разворачивать дополнительный.

Например: var someValue = someOptional ?? DEFAULT_VALUE (значение по умолчанию зависит от типа опционального.)

В случае экземпляров вы можете просто заменить DEFAULT_VALUE экземпляром класса по умолчанию.

Для например: В случае cellForRowAtIndexPath, он требует, чтобы принудительно разворачивать ячейки, который вы создали, но вы можете использовать Nil коалесцирующего оператор там, а также возвращения someCell ?? TableViewCellClass()

Смежные вопросы