/* 注意点: 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的结构体的处理基本没有蹩脚的地方,很好啊。
时间: 2024-10-28 23:20:36