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

来源:互联网 发布:linux删除文件权限不够 编辑:程序博客网 时间:2024/05/21 11:18
/* 注意点: 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")++deptdept--let dept2 = deptupdateDept(&dept)if dept == dept2{    print(dept2.Description())}

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

0 0
原创粉丝点击