Objective C转Swift注意事项(一)合理使用结构体,枚举,extensions

这篇博客介绍了Objective C程序员转向Swift时需要注意的事项,重点讨论了如何合理使用枚举(包括关联值、扩展)、结构体以及Swift中的Extensions。文章通过示例详细阐述了枚举的关联值、计算属性和协议扩展等功能,结构体的特性,以及Extensions在设计接口、分离代码逻辑和扩展已有类等方面的作用。最后,强调了在适当场景下选择结构体的优势和协议扩展的灵活性。
摘要由CSDN通过智能技术生成

前言

14年Swift刚出的时候开始学习的Swift,后来由于项目需要,一直写App还是用的OC。最近打算把Swift重新捡起来,这个Objective C转Swfit系列就当成是我的复习笔记,顺便写成博客记录下来吧。

这个系列不是讲解Swift基础,主要是讲解OC(以下OC均指的是Objective C)转过来的同学有些习惯要改变了,才能更好的使用Swift的很多优秀特性。

枚举

通常,你在Objective C中,用枚举NS_ENUM来定义有限的状态,比如,假如我们要表示一个登录的结果

typedef NS_ENUM(NSInteger,LHLoginResult){
    LHLoginResultSucceess, //成功
    LHLoginResultFailure, //失败
    LHLoginResultError, //出错了
};

其实,OC中,枚举更像一个加强版的整型

假如,把这个简单的转为Swift,那么看起来是这样子的。

enum LoginResult {
    case Success
    case Failure
    case Error
}

如果是这么写枚举,你真的是暴殄天物了

Swift枚举是first-class types,它有很多Swift class具有的特性

  • Associated Values 关联值
  • 计算属性
  • 实例方法
  • 构造函数
  • 遵循协议
  • 支持extensions

好了,那么Swift中,这样的一个“登录结果”应该如何用枚举来表示呢?

通常,失败的时候,我们希望知道失败的原因是啥,出错的时候,我们希望知道错误的原因是啥。

利用Associated Values 关联值,来实现这一点

于是,这个枚举变成了酱紫

enum LHLoginResult {
    case Success
    case Failure(message:String)
    case Error(error:NSError)
}

等等,现在是三种结果,要是能提供一个接口,只返回给我一个Bool,告诉我登陆成功还是失败就更好了

利用Extension和计算属性,我们添加一个方便的接口

extension LoginResult{
    var isSuccess:Bool{
        switch self {
        case .Success:
            return true
        default:
            return false
        }
    }
}

通常,App需要Log出一些信息,我们继续完善这个枚举,让它支持Log

用extension,让这个枚举遵循协议CustomStringConvertible(Swift中的一个log相关的协议)

extension LoginResult:CustomStringConvertible{
    var description: String {
        switch self {
        case .Success:
            return "Success"
        case let .Failure(message):
            return message
        case let .Error(error):
            return error.localizedDescription
        }
    }
}

除此之外,Swift的枚举还支持RawValues

enum ASCIIControlCharacter: Character {
    case Tab = "\t"
    case LineFeed = "\n"
    case CarriageReturn = "\r"
}

再深入一点,我们来看看Swift中一些默认使用枚举来定义的类型

Optional

public enum Optional<Wrapped> : _Reflectable, NilLiteralConvertible {
    case None
    case Some(Wrapped)
    /
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值