//———————object-oriented—————————–
//类的属性应该初始化,String可以用String?
class Person {
//swift property is public
var age:Int = 0;
var name:String? ; // ? 表示 name为空或nil或没有设置,name是可选的
//构造方法
init(){// 不带参数
age = 10;
name = "william"
}
//构造函数
init(name:String , age:Int){
self.name = name
self.age = age
}
//析构函数,自动调用
deinit{
}
func getName() -> String{
// !表示可以返回nil
return name!;
}
// class method
class func getMaxAge() -> Int{
return 200;
}
}
var o = Person()
o.name = "william"
o.getName()
Person.getMaxAge();
//构造函数在不加"_"的情况下,标签都要写,普通函数第一个参数的标签不用写
var op = Person(name: "william", age: 23);
//————-结构体默认带label构造函数——————-
//—————–getter and setter———————
struct Rect{
var a :Int;
var b :Int;
var sum :Int {// Computed property must have an explicit type
get{
return a+b
}
set(num){
a = num
b = num
}
}
}
var r = Rect(a:10,b:10)
r.sum // 20
r.sum = 100
r.a //100
r.b // 100
//------------------------------------------------------
//———————-protocal————————-
@objc protocol Service{
func printSth();
//可选协议可以实现也可以不实现
optional func printSb();
}
class Printer:NSObject,Service {
@objc func printSth() {
println("something")
}
}
var ptr = Printer() as Service;
ptr.printSth()
//可选协议不能直接调用,要加上?,表示如果不存在就不调用它,返回nil
ptr.printSb?()