昨天刚接触swift就被它的语法弄晕了,今天先拿构造器开刀~。
我oc写的不多,但构造函数随便写,反正自己用么,也没有错误提示。经典的错误就是成员未初始化。
刚用swift写个小东西,问题马上来了。
http://my.oschina.net/hejunbinlan/blog/470123
可以看看这里面的,这哥们写的,我也几乎都遇到了。下面是我写的代码,就这么点儿东西,整了半天~
import Foundation
import UIKit
class MyObject:UIRefreshControl {
var MyName: NSString
typealias ActionExcute = () -> ()
var action: ActionExcute
init(MYaction:ActionExcute) {
self.action = MYaction
self.MyName = "aaa"
super.init()
}
init(name : NSString, MYaction:ActionExcute) {
MyName = name
self.action = MYaction
super.init()
}
convenience init(Age:NSInteger, name1: NSString,MYaction1:ActionExcute)
{
self.init(name:name1,MYaction:MYaction1)
}
var BoolArray: [Bool] =
{
var result = [Bool]()
print(result)
var isBlack = false
result.append(false)
return result
}()
func refrsh() {
let a = BoolArray
if !a[0] {
print(a)
}
self.action()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
总结
(1)单看这个Swift比oc可强太多了,连c++都比不上,c++里面的构造函数不能互相调用。Delphi虽然能调用,但没有这么多的错误检查。
(2)不管是指定的构造函数,还是便利的构造函数,它折腾这么多,目的只有一个,保证用你的类创建对象的安全,使成员变量全部初始化。
(3)Swift要求在构造器里面,先初始化自己的变量,再调用父类的,这个和其他语言不一样啊。c++是先初始化父类,delphi写哪都行,oc也没要求啊。
这就导致了,初始化过程中,不能用继承下来的东西,因为还没初始化~