开发者社区 问答 正文

用 struct 实现类似 swift 的枚举类型

swift的枚举类型非常方便,即可以赋值字符串又可以使用函数。

记得之前看到过一个objective-c下用struct实现的类似的东西,貌似是通过struct里面函数定义指针,然后通过函数return值来实现的。具体记不得了。也没有找到来源。

所以来请教一下,有知道的告知一下~

展开
收起
杨冬芳 2016-06-28 18:47:57 2024 分享 版权
1 条回答
写回答
取消 提交回答
  • IT从业

    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();//测试函数调用

    2019-07-17 19:48:40
    赞同 展开评论
问答分类:
问答地址: