搜索
您的当前位置:首页正文

在学习swift的一些笔记(七)

来源:知库网

OC与Swift中的枚举


OC的枚举NS_ENUM

/** 支付状态对应的枚举 */
typedef NS_ENUM(NSInteger, PaymentType) {
    /** 支付宝支付 */
    KPaymentTypeZhiFuBao = 1,
    /** 微信支付 */
    KPaymentTypeWeiXin = 2,
    /** 银联支付 */
    KPaymentTypeYinLian = 3,
    /** 钱包支付 */
    KPaymentTypeWallet = 4,

};

NS_ENUM : 递增枚举, 每个枚举类型即便不是每个都赋值,那么以后的值也会递增
NSInteger: 枚举值的数据类型
PaymentType: 枚举的数据类型,相当于 枚举的名称,用这个名称来创建变量
KPaymentTypeZhiFuBao = 1, 枚举的值

建立变量:PaymentType type;
赋值: PaymentType type = KPaymentTypeZhiFuBao;

OC的枚举NS_OPTIONS

/** 支付状态对应的枚举 */
typedef NS_OPTIONS(NSInteger, PaymentType) {
    /** 支付宝支付 */
    KPaymentTypeZhiFuBao = 1,
    /** 微信支付 */
    KPaymentTypeWeiXin = 2,
    /** 银联支付 */
    KPaymentTypeYinLian = 3,
    /** 钱包支付 */
    KPaymentTypeWallet = 4,
};

NS_OPTIONS:定义的枚举值是位移的,可以按位或设置数值,0表示什么附加操作方式都没有


Swift的枚举

public enum UITableViewStyle : Int {
    case Plain // regular table view
    case Grouped // preferences style table view
}

UITableViewStyle: 用来创建属性的名称如var style: UITableViewStyle
这是一个TableView的枚举 调用的话UITableViewStyle.Plain直接赋值

/** 支付方式 */
enum PaymentType:Int{

    case KPaymentTypeZhiFuBao = 1
    case KPaymentTypeWeiXin = 2
    case KPaymentTypeYinLian = 3
    
    func isPaymentType()->(String){
    
        switch self{
        case .KPaymentTypeZhiFuBao:
            return "支付宝"
        case .KPaymentTypeWeiXin:
            return "微信支付"
        case .KPaymentTypeYinLian:
            return "银联"
        }
    }
}

也可以这样写...对于一些现有的OC需求来讲这么写实在是太好了.

Swift中的结构体


public struct CGSize {
    public var width: CGFloat
    public var height: CGFloat
    public init()
    public init(width: CGFloat, height: CGFloat)
}

与类唯一的区别就是 这个是值传递,类是地址传递.

mutating 关键字

在结构体中如果想要通过绑定的方法来修改结构体的值时,要加上mutating 关键字,例子

ublic mutating func append(newElement: Element)

Top