标签:
/*
注意点:
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的结构体的处理基本没有蹩脚的地方,很好啊。
标签:
原文地址:http://blog.csdn.net/liyanq528/article/details/51329545