Вы имеете:
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
).
В ваших данных будет ли книга всегда иметь заголовок? Будет ли у него всегда есть автор? – Undo
Если вам нужен тип только для хранения данных и чтение информации, используйте 'struct' вместо' class'. Подробнее об этом можно прочитать здесь: [Классы и структуры] (https: // разработчик.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html) –
Я даю простой пример, потому что у меня возникают сомнения относительно использования опций – nevermind