객체를 초기화하고 사용하는 방법을 더 잘 이해하기 위해 테스트 중심 개발 연습을하고 있습니다. 테스트 케이스에서 UITableView하지만 초기화 함수를 사용할 필요가 없습니다. 여기 초기화하지 않고 객체를 Swift에 저장
코드의 샘플입니다 나는 일반적으로 빠른 언어와 OOP를 배우고으로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와 같은 속성에 액세스 할 수있었습니다.
나는 어떤 종류의 클래스의 인스턴스를 사용하기 위해서 그것이 (저장 프로퍼티가 디폴트로 설정되지 않으면) 초기화되어야한다고 생각하는 것이 맞을까?
내가 평신도 용어로 한 것은 무엇입니까? 방금 메모리를 할당 했나요? 초기화 (프레임 : CGRect, 스타일 : UITableViewStyle)
덕분에 애플의 문서를 읽는 것은,이 클래스가 나는 프레임이나 스타일을 설정하지 않기 때문에 사용할 수 없었 이니셜 라이저가있을 때 나는 혼동되었다
입니다 미리 의견을 말하거나 응답 할 수 있습니다.
감사합니다. 내가 혼란스러워 할 때 애플의 문서를 읽을 때,이 클래스는 결코 프레임이나 스타일을 설정하지 않았기 때문에 결코 사용하지 않아도되는 이니셜 라이저를 가지고있다 : init (frame : CGRect, style : UITableViewStyle) –
내 자신의 이해와보고 Apple의 설명서에서 UITableView의 init 메서드에는 선택적인 두 가지 속성이 있습니다. 그래서 내가 말하고자하는 것은 내가 그 속성들을 설정하지 않았거나 init 메소드라고 불렀지 만, 나의 테스트 케이스는 여전히 내가 믿는 객체를 사용할 수 있었다. –
* 지정된 * 초기화 프로그램의 개념이 있습니다.이 초기화 프로그램은 클래스의 다른 모든 초기화 프로그램이 호출해야하는 초기화 프로그램입니다. 나는'UITableViewController'와 같은'UIView' 서브 클래스에 대해'init (frame : style :)'또는'init (coder :)'를 호출한다고 가정합니다. –