2014-10-04 4 views
0

Как я могу сделать следующее:Swift класса с дополнительным значением

У меня есть класс в быстрой

class Book { 
var title: String 
var author: String? 

init(title: String, author: String?) { 
    self.title = title 
    self.author = author 
} 

и в другом классе я делаю вызов к API для получения списка книг, иногда хотя автор нет так

let title: String? = getBookTitle() 
let author: String? = getBookAuthor() 

Book = new Book(title: book, author: author) 

Я не очень уверен в моем подходе, это правильный способ сделать это? потому что теперь я должен использовать (если позволить) каждый раз, когда я хочу, чтобы автор книги

+0

В ваших данных будет ли книга всегда иметь заголовок? Будет ли у него всегда есть автор? – Undo

+0

Если вам нужен тип только для хранения данных и чтение информации, используйте 'struct' вместо' class'. Подробнее об этом можно прочитать здесь: [Классы и структуры] (https: // разработчик.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html) –

+0

Я даю простой пример, потому что у меня возникают сомнения относительно использования опций – nevermind

ответ

2

Вы имеете:

let title: String? = getBookTitle() 
let author: String? = getBookAuthor() 

Там нет предположительно нет смысла при создании title необязательно, как вы говорите нам, он всегда присутствует, но это зависит от того, как был определен getBookTitle. Кроме того, если были определены эти методы для возврата String или String?, в зависимости от обстоятельств, то тип здесь может подразумеваться, что дает:

let title = getBookTitle() 
let author = getBookAuthor() 

Далее, у вас есть:

Book = new Book(title: book, author: author) 

Но, на создание экземпляра новый объект Book нуждается имя переменной (и new ключевое слово не требуется), что дает:

let book = Book(title: book, author: author) 

(использование let, если вы собираетесь установить эту локальную переменную book один раз в этой области. Если вы собираетесь перезагружать его снова и снова, не выходя из этой функции, используйте var. . Нижняя линия, используйте let всякий раз, когда вы можете)

Наконец, вы говорите:

это правильный способ сделать это? потому что теперь я должен использовать (if let) каждый раз, когда хочу получить автора книги.

Да, целесообразно использовать опцию для author. И да, это означает, что вам необходимо развернуть этот необязательный параметр с if let или эквивалентным синтаксисом, когда вы хотите его использовать. Обратите внимание, что вам необязательно выполнять необязательный синтаксис привязки, if let, если вы этого не хотите, но вы можете просто использовать if, а затем выполнить принудительное разворачивание (например, !), если хотите. Но вам нужно развернуть его так или иначе.

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

0

Труды мне:

import UIKit 

class Book { 

    var title: String 
    var author: String? 

    init(title: String, author: String?) { 
     self.title = title 
     self.author = author 
    } 
} 

class ViewController: UIViewController { 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     getBookTitle() 
     getBookAuthor() 
     var book = Book(title: "A Tale of Two Cities", author: "Charles Dickens") 

    } 

    func getBookTitle() { 
    } 

    func getBookAuthor() { 
    } 

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