如何执行以下操作:
我有一个快速课程
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 :(得分: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
)。
答案 1 :(得分: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() {
}
}