Поскольку я работаю над тестом на основе теста, чтобы лучше понять, как объекты могут быть инициализированы и использованы, я столкнулся с тестовым примером, где я создаю объект, такой как UITableView, но мне не пришлось использовать функцию init UITableView.Хранение объекта без инициализации в 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)
}
Как я учусь на быстром языке и ООП в целом, я знаю Инициализаторы бывают разные вкусы и я предположил, что для того, чтобы использовать экземпляр мы необходимо будет инициализировать его. Однако выше я смог создать экземпляр UITableView и сохранить его память внутри переменной. Мне даже разрешили доступ к его свойствам, таким как tableview.datasource.
Я хотел бы знать, правильно ли я считаю, что для использования экземпляра любого типа класса он должен быть инициализирован (если сохраненные свойства не установлены по умолчанию)?
Что я только что делал в условиях неспециалиста? Я просто выделил память?
Где я растерялся, когда чтение документации Apple, этот класс имеет инициализатора, который я никогда не приходилось использовать, потому что я никогда не ставил кадр или стиль: Init (кадр: CGRect, стиль: UITableViewStyle)
спасибо заранее для комментирования или ответа.
Спасибо, и это имеет смысл. Когда я запутался, когда читал документацию Apple, у этого класса есть инициализатор, который мне никогда не приходилось использовать, потому что я никогда не устанавливал фрейм или стиль: init (frame: CGRect, style: UITableViewStyle) –
Из моего собственного понимания и просмотра Документация Apple, метод init для UITableView имеет два свойства, которые не являются необязательными. Так что я говорю, что я никогда не устанавливал эти свойства или не вызывал метод init, но мой тестовый пример все еще был в состоянии использовать объект, который я считаю. –
Существует концепция инициализатора * назначенного *, который является инициализатором, который должен вызывать все другие инициализаторы для класса. Я считаю, что для подклассов 'UIView', таких как' UITableViewController', вы должны вызывать либо 'init (frame: style:)', либо 'init (coder:)' –