2014-11-28 7 views
2

Есть ли простой способ объединить значения и параметры параметров функции по умолчанию, поэтому параметр принимает значение по умолчанию, когда параметр указан в вызове функции, но это значение ноль?Значения по умолчанию для параметров функции, в которых значение передано in, равно nil

Например:

class MyObj { 

    var foobar:String 

    init(foo: String?="hello") { 
     self.foobar = foo! 
    } 
} 

let myObj = MyObj() // standard use of default values - don't supply a value at all 

println(myObj.foobar) // prints "hello" as expected when parameter value is not supplied 

var jimbob: String? // defaults to nil 

... 

// supply a value, but it is nil 
let myObj2 = MyObj(foo: jimbob) // <<< this crashes with EXC_BAD_INSTRUCTION due to forced unwrap of nil value 

println(myObj2.foobar) 

... или это лучше всего, чтобы дать значение константы членов/переменное по умолчанию, а затем только изменить их, если есть значение при условии, конструктору, например:

let foobar:String = "hello" 

init(foo: String?) { 
    if foo != nil { 
     self.foobar = foo! 
    } 
} 

Ощущается, что должно быть более аккуратное решение, учитывая другие особенности языка в этой области.

ответ

14

Как насчет:

class MyObj { 

    var foobar:String 

    init(foo: String?=nil) { 
     self.foobar = foo ?? "hello" 
    } 
} 
+0

отличное решение - спасибо! –

+1

Раздел в Apple Swift iBook под названием «Nil Coalescing Operator» обеспечивает отличное объяснение того, что такое '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' –

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

  • Нет связанных вопросов^_^