2016-04-28 2 views
0

Я пытаюсь получить мою голову вокруг дополнительных опций, скажем, у меня есть следующие классы:Быстрое создание и тестирование объекта с нулевыми свойствами?

class Contact { 

    var displayName:String 

    init(displayName:String) { 
     self.displayName = displayName 
    } 

} 

class Contacts { 
    func create(displayName:String) -> Contact { 

     return Contact(displayName: displayName) 
    } 
} 

как вы можете видеть Контактный класс имеет поле Выводимое, но это значение может быть нулевым при инициализации.

так, чтобы инициализировать этот класс, я обычно делают:

let contact = Contact(displayName: "Test Name") 

, но вместо этого я хочу быть в состоянии сделать это, а также:

let contact = Contact() 

или

let contact = Contacts().create() 
+0

Я не понять, какую проблему вы испытываете. Пожалуйста, уточните точный вопрос и ожидаемый результат. –

+0

Позвольте мне изменить свой вопрос, чтобы объяснить себя немного лучше, чем – ospfranco

+0

Свойство 'displayName' не является необязательным (после вашего редактирования), так что вы ожидаете, что' let contact = Contact() 'создает? –

ответ

3

Вы можете сделать параметр инициализации опционального String? с значением по умолчаниюnil:

class Contact { 
    var displayName: String? 

    init(displayName: String? = nil) { 
     self.displayName = displayName 
    } 
} 

let contact1 = Contact() 
let contact2 = Contact(displayName: "John") 

же произведения для Contacts класса:

class Contacts { 
    func create(displayName: String? = nil) -> Contact { 
     return Contact(displayName: displayName) 
    } 
} 

let contacts = Contacts() 
let contact3 = contacts.create() 
let contact4 = contacts.create("Mary") 
+0

Точно, что я искал, спасибо! – ospfranco

+0

Да, это более правильный ответ. – Mark

0

Сделано свойство displayName необязательно, например:

var displayName:String?

Опционы могут содержать либо ноль, либо фактическое значение, в вашем случае строку.

1

Измените класс к этому, если вы хотите использовать дополнительный displayName:

class Contact { 
    var displayName: String? 

    convenience init(displayName: String) { 
     self.init() 
     self.displayName = displayName 
    } 
} 

Это позволяет вам это:

let contact = Contact() 
let otherContact = Contact(displayName: "Test Name") 

EDIT: Вот функция создания, а также:

class Contacts { 
    func create() -> Contact { 
     return Contact() 
    } 

    func create(displayName: String) -> Contact { 
     return Contact(displayName: displayName) 
    } 
} 

Но я бы рекомендовал это:

class Contact { 
    var displayName: String? 

    init(displayName: String?) { 
     self.displayName = displayName 
    } 
} 

class Contacts { 
    func create(displayName: String?) -> Contact { 
     return Contact(displayName: displayName) 
    } 
} 
+0

ok, который решает часть проблемы, как насчет функции с необязательными параметрами и отправки этого необязательного класса Contact? func create (displayName: String) -> Контакт { return Contact (displayName: displayName) } – ospfranco

+0

Я обновлю ответ. – Mark

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