Tag: 初始化

错误在Swift类:属性没有在super.init调用初始化 – 如何初始化需要使用self在他们的初始化参数

我重写了一个UITableViewController在Swift中,其中我有两个必需的variables,这是通过使用self的weak引用初始化,因为这些是用来实现UITableViewDataSource协议,并需要self引用,以使用其tableView属性 class VideosListViewController: UITableViewController { required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.datasourceOfflineVideos = ASDataSource(tableViewController: self) self.datasourceOnlineVideos = ASDataSource(tableViewController: self) } // MARK: – Variables var datasourceOnlineVideos:ASDataSource var datasourceOfflineVideos:ASDataSource } 现在的问题是因为它给了我错误Property not initialized at super.init call这是预期的解释在这里: Swift类错误:属性没有在super.init调用初始化 。 Swift的编译器执行四个有用的安全检查,以确保两阶段初始化完成没有错误 安全检查1指定的初始化程序必须确保所有由其类引入的属性在委托给一个超类初始化程序之前进行初始化。 摘录自:苹果公司“Swift编程语言”,iBooks。 https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11 所以我的问题是: 如果一个ASDataSource类中的实例variables需要self引用来初始化像ASDataSourcetypes的variables,那我该怎么做? 由于swift不允许我在初始化所有实例variables之前调用super.init()在调用super.init()之前也不允许我在init()的初始化程序中使用self , 目前我正在使用可选variables来解决问题。 但为了学习的目的,我想知道如何做到这一点。 提前致谢 :)

在Swift中初始化时调用实例方法

我是新来的Swift,并想要使用像这样的实例方法初始化一个对象的成员variables: class MyClass { var x: String var y: String func createY() -> String { self.y = self.x + "_test" // this computation could be much more complex } init(x: String) { self.x = x self.y = self.createY() } } 基本上,我不是在init方法中内联所有的初始化代码,而是要将初始化代码y提取到专用方法createY并在init调用此实例方法createY 。 但是,Swift编译器(Xcode 6.3 beta中的Swift 1.2编译器)抱怨: 在super.init初始化自我之前,在方法调用“xxx”中使用'self' 这里'xxx'是实例方法(createY)的名称。 我可以理解Swift编译器在抱怨什么,以及它想要解决的潜在问题。 但是,我不知道如何解决这个问题。 在Swift中调用初始化代码的其他实例方法的正确方法是什么? 目前,我使用下面的技巧作为解决方法,但我不认为这是这个问题的习惯解决scheme(这个解决方法需要y被声明为使用var而不是let ,这也让我感到不安): init(x: String) […]

iOS指定的初始化程序:使用NS_DESIGNATED_INITIALIZER

我们在XCode 6中引入了这个新的macros:NS_DESIGNATED_INITIALIZER 我在网上search,但无法find任何有关如何使用它的好文档。 在语法上,我们可以像这样使用它: – (instancetype)initWithCoder:(NSCoder *)coder NS_DESIGNATED_INITIALIZER; 但是用这个macros标记一个初始值设定项有什么好处,而且在使用这个macros时我们应该注意些什么呢? 我主要感兴趣的是这个macros的用例。 任何链接/文件将不胜感激。