Während ich eine testgetriebene Entwicklungsübung durchführe, um besser zu verstehen, wie Objekte initialisiert und verwendet werden können, habe ich einen Testfall durchlaufen, in dem ich ein Objekt wie a UITableView, aber ich musste nicht die init-Funktion von UITableView verwenden. HierSpeichern eines Objekts ohne Initialisierung in Swift
ist ein Beispiel für den Code:
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)
}
Als ich die rasche Sprache und OOP im Allgemeinen lerne, ich weiß initializers in verschiedenen Geschmacksrichtungen kommen und ich nahm an, dass, um eine Instanz verwenden wir muss es initialisieren. Wie auch immer, ich konnte eine UITableView-Instanz erstellen und den Speicher in einer Variablen speichern. Ich durfte sogar auf Eigenschaften wie tableview.datasource zugreifen.
Ich würde gerne wissen, bin ich richtig in der Annahme, dass, um Instanz jeder Art von Klasse zu verwenden, muss es initialisiert werden (wenn die gespeicherten Eigenschaften nicht standardmäßig festgelegt sind)?
Was habe ich nur in Laien ausgedrückt? Habe ich nur den Speicher reserviert?
Wo ich wurde verwirrt ist beim Lesen von Apples Dokumentation, diese Klasse einen Initialisierer hat, die ich musste nie benutzen, weil ich nie den Rahmen oder den Stil festgelegt: init (Rahmen: CGRect, style: UITableViewStyle)
Dank im voraus für das Kommentieren oder Beantworten.
Danke und das macht Sinn. Wo ich verwirrt wurde, wenn ich Apples Dokumentation lese, hat diese Klasse einen Initialisierer, den ich nie benutzen musste, weil ich nie den Rahmen oder den Stil gesetzt habe: init (frame: CGRect, style: UITableViewStyle) –
Von meinem eigenen Verständnis und Blick Apples Dokumentation, die Init-Methode für UITableView hat zwei Eigenschaften, die nicht optional sind. Also, was ich sage ist, dass ich nie diese Eigenschaften gesetzt oder die Init-Methode aufgerufen habe, aber mein Testfall war immer noch in der Lage, das Objekt zu benutzen, von dem ich glaube. –
Es gibt das Konzept des Initiators * designed *, der Initialisierer, den alle anderen Initialisierer für eine Klasse aufrufen sollen. Ich glaube, dass Sie für 'UIView'-Unterklassen wie' UITableViewController' entweder 'init (frame: style:) 'oder' init (coder:) '' –