當我正在完成一個測試驅動的開發練習以更好地理解對象如何被初始化和使用時,我已經運行了一個測試用例,其中創建了一個對象,如UITableView,但我不必使用UITableView的init函數。在Swift中存儲沒有初始化的對象
下面是代碼樣本:
import XCTest
@testable import PassionProject
class ItemListDataProviderTests: XCTestCase {
var sut: ItemListDataProvider!
var tableView: UITableView!
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
sut = ItemListDataProvider()
tableView = UITableView()
sut.itemManager = ItemManager()
tableView.dataSource = sut
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func tests_numberOfSectionsIsTwo(){
let numberOfSections = tableView.numberOfSections
XCTAssertEqual(numberOfSections, 2)
}
,因爲我學習一般迅速語言和OOP,我知道初始化有不同的口味,我認爲爲了使用一個實例,我們將需要初始化它。然而,上面我能夠創建一個UITableView實例並將其內存存儲在一個變量中。我甚至被允許訪問它的屬性,如tableview.datasource。
我想知道我是否正確認爲要使用任何類型的實例,它必須被初始化(如果存儲的屬性沒有默認設置)?
我剛纔在外行人中做了些什麼?我只是分配內存?
當我開始困惑是,當閱讀蘋果文檔,這個類有一個初始化,我從未使用過,因爲我從來沒有設置幀或風格:初始化(幀:的CGRect,風格:UITableViewStyle)
謝謝提前進行評論或回答。
謝謝你,這是有道理的。當我讀到Apple的文檔時,這個類有一個我從來沒有用過的初始化器,因爲我從來沒有設置框架或樣式:init(frame:CGRect, style:UITableViewStyle) –
從我自己的理解和看待Apple的文檔,UITableView的init方法有兩個不可選的屬性。所以我說的是我從來沒有設置這些屬性或稱爲init方法,但我的測試用例仍然能夠使用我相信的對象。 –
* *指定*初始值設定項的概念,它是一個類的所有其他初始值設定項應該調用的初始值設定項。我相信對於像'UITableViewController'這樣的'UIView'子類,你應該調用'init(frame:style:)'或'init(coder:)' –