zoukankan      html  css  js  c++  java
  • 精通ObjectiveC系列 2) 使用结构和枚举

    #import <Foundation/Foundation.h>
    
    // --------------------------------------------------
    // constants for the different kinds of shapes and their colors
    
    typedef enum {
        kCircle,
        kRectangle,
        kOblateSpheroid
    } ShapeType;
    
    
    typedef enum {
        kRedColor,
        kGreenColor,
        kBlueColor
    } ShapeColor;
    
    
    // --------------------------------------------------
    // Shape bounding rectangle
    
    typedef struct {
        int x, y, width, height;
    } ShapeRect;
    
    
    // --------------------------------------------------
    
    // The Shape
    
    typedef struct {
        ShapeType type;
        ShapeColor fillColor;
        ShapeRect bounds;
    } Shape;
    
    
    // --------------------------------------------------
    // convert from the ShapeColor enum value to a human-readable name
    
    NSString *colorName (ShapeColor colorName)
    {
        switch (colorName) {
            case kRedColor:
                return @"red";
                break;
            case kGreenColor:
                return @"green";
                break;
            case kBlueColor:
                return @"blue";
                break;
        }
        
        return @"no clue";
        
    } // colorName
    
    
    void drawCircle (ShapeRect bounds, ShapeColor fillColor)
    {
    
        NSLog (@"drawing a circle at (%d %d %d %d) in %@",
               bounds.x, bounds.y, 
               bounds.width, bounds.height,
               colorName(fillColor));
        
    } // drawCircle
    
    
    void drawRectangle (ShapeRect bounds, ShapeColor fillColor)
    {
        NSLog (@"drawing a rectangle at (%d %d %d %d) in %@",
               bounds.x, bounds.y, 
               bounds.width, bounds.height,
               colorName(fillColor));
        
    } // drawRectangle
    
    
    void drawEgg (ShapeRect bounds, ShapeColor fillColor)
    {
        NSLog (@"drawing an egg at (%d %d %d %d) in %@",
               bounds.x, bounds.y, 
               bounds.width, bounds.height,
               colorName(fillColor));
        
    } // drawEgg
    
    
    // --------------------------------------------------
    // Draw the shapes
    
    void drawShapes (Shape shapes[], int count)
    {
        for (int i = 0; i < count; i++) {
            
            switch (shapes[i].type) {
                    
                case kCircle:
                    drawCircle (shapes[i].bounds, 
                                shapes[i].fillColor);
                    break;
                    
                case kRectangle:
                    drawRectangle (shapes[i].bounds, 
                                   shapes[i].fillColor);
                    break;
                    
                case kOblateSpheroid:
                    drawEgg (shapes[i].bounds, 
                             shapes[i].fillColor);
                    break;
            }
        }
        
    } // drawShapes
    
    
    // --------------------------------------------------
    // The main function.  Make the shapes and draw them
    
    int main (int argc, const char * argv[]) 
    {
        Shape shapes[3];
        
        ShapeRect rect0 = { 0, 0, 10, 30 };
        shapes[0].type = kCircle;
        shapes[0].fillColor = kRedColor;
        shapes[0].bounds = rect0;
        
        ShapeRect rect1 = { 30, 40, 50, 60 };
        shapes[1].type = kRectangle;
        shapes[1].fillColor = kGreenColor;
        shapes[1].bounds = rect1;
        
        ShapeRect rect2 = { 15, 18, 37, 29 };
        shapes[2].type = kOblateSpheroid;
        shapes[2].fillColor = kBlueColor;
        shapes[2].bounds = rect2;
        
        drawShapes (shapes, 3);
        
        return (0);
        
    }


    运行结果:

    drawing a circle at (0 0 10 30) in red
    drawing a rectangle at (30 40 50 60) in green
    drawing an egg at (15 18 37 29) in blue
    drawing a triangle at (47 32 80 50) in red

    技术改变世界
  • 相关阅读:
    HihoCoder 1638 : 小Hi的天平 (2-sat+并查集)
    阿里云安全肖力:云上数据安全体系建设的六要素
    MaxCompute客户端(odpscmd)在windows命令行下查询中文乱码问题处理实践
    序列化方案选型对比
    亚洲唯一,阿里云SLB位列Gartner全球网络负载均衡市场前五
    阿里云OSS同城冗余存储技术解析
    OSS跨同城3AZ重磅发布,构造全面数据保护体系
    阿里云OSS同城冗余存储正式商业化,提供云上同城容灾能力
    云原生应用 Kubernetes 监控与弹性实践
    GIAC2019 演讲精选 | 面向未来的黑科技——UI2CODE闲鱼基于图片生成跨端代码
  • 原文地址:https://www.cnblogs.com/davidgu/p/2918198.html
Copyright © 2011-2022 走看看