swift的枚举类型非常方便,即可以赋值字符串又可以使用函数。
记得之前看到过一个objective-c下用struct实现的类似的东西,貌似是通过struct里面函数定义指针,然后通过函数return值来实现的。具体记不得了。也没有找到来源。
所以来请教一下,有知道的告知一下~
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
struct David {
var x = 0;//定义一个结构体,两个字段x,y
var y = 0;//初始值
//定义结构体的构造函数
init(){
//定义一个空构造函数,真正的构造函数,调用时候不带参数调用这里
//构造函数是以init 开头的,自动调用
// [[oc alloc]init]不是构造函数
println("in init");
}
init(x:Int,y:Int){
self.x = x;//定义带有2个参数的构造函数,带双参数的时候调用这里
self.y = y;
println("in init(x:y:)")
}
//结构体有构造函数,没有析构函数
func getCenter()->Int{
return (x+y)/2;
}
//给现有的点x,y加偏移量
//obj.addOffset(100,deltaY:)
mutating func addOffset (deltaX:Int,deltaY:Int){
//结构体是拷贝的对象,函数内部不能修改变量
//需要修改,加关键字mutating,
//mutating,可以修改构造函数内部变量
x += deltaX;
y += deltaY;
}
};
func testDavid(){
//定义一个结构体
//结构体的定义是 结构体的名字(参数名:参数值)
var d = David();//调用构造函数init()
var s = David(x: 100, y: 200);//调用构造函数init(x,y)
println("s.x = \(s.x), s.y = \(s.y)")
let c = s.getCenter();//调用析构函数getCenter
println("c is \(c)");
s.addOffset(100, deltaY: 200);//因为析构函数没有返回值,所以不能赋值给变量
println("d is :\(s.x)");
}
testDavid();//测试函数调用