[swift学习之四]结构体练习

/*
 注意点:
 1:struct和class里面的变量都要初始化,否则不能创建实例。
 2:struct也得实例化,加()
 3:struct作为参数的话,是不能修改的,需要加inout关键字,而且实参需要取地址。
    这个和oc不太一样,首先oc在arc下是禁止里面有引用类型,其次oc的一个指针搞定这个,用不到inout。
 struct Department {
    NSInteger no;
 };
 -(void)UpdateDept:(struct Department*)dept
 {
    dept->no = 30;
 }
 - (void)viewDidLoad {
    [super viewDidLoad];
    struct Department d;
    d.no = 20;
    [self UpdateDept:&d];
    NSLog(@"%ld",d.no);//30
 }
 不过总的来说还是swift好。
 4:只有类是引用类型,其他类型全部是值类型。值类型还包括整型、浮点型、布尔型、字符串、元组、集合和枚举。
 5:系统提供常见结构体 有 Bool  Int Float Double  String 等
 */
struct Department {
    typealias DEPT = Department
    var no : Int = 0
    var name : String = ""
    var nsName: NSString = ""
    init(ano:Int,aname:String){
        self.no = ano
        self.name = aname
    }
    init(aname:String){
        self.no = 5
        self.name = aname
    }
    func Description() -> String {
        return "no:\(self.no)name:\(name)"
    }
}

/*前置预算符*/
prefix func ++(inout Left: Department) -> Department {
    Left.no = Left.no + 1
    return Left
}
/*后置预算符*/
postfix func --(inout Left: Department) -> Department {
    Left.no = Left.no - 1
   return Left
}
/*比较预算符*/
func ==(Left: Department, Right: Department) -> Bool {
     return Left.no == Right.no
}
/*运算符的东西以后再说,先贴个常用的方式:
 infix operator ^^ {associativity left precedence 255}
*/
func updateDept(inout aDept: Department) -> Void {
    aDept.nsName = "After Update"
}

var dept = Department.DEPT(aname: "Hello")
++dept
dept--
let dept2 = dept
updateDept(&dept)
if dept == dept2{
    print(dept2.Description())
}

总的来说,虽然没有指针,但swift的结构体的处理基本没有蹩脚的地方,很好啊。

你可能感兴趣的:([swift学习之四]结构体练习)