swift 字符串转int_Swift Tips Streamline 如何假装写过 Swift

c27f214565cf845259855a75d9bc1a61.png

作者 Nemocdz,腾讯 iOS 工程师。这篇文章转载至他的博客,可以点击阅读原文来查看他的博客。本文总结了笔者日常使用 Swift 的一些小 Tips。

文章较长,预计阅读时间 15分钟

Safe & Fast

1. 能用 let,尽量不用 var

把代码里的 var 全改成 let,只保留不能编译通过的。

ObjC 的 Foundation 层几乎都是继承 NSObject 实现的,平时都在操作指针,所以要区分 Mutable 和 Imutable 的设计,比如 NSStringNSMutableString

Swift 使用了 let 和 var 关键字直接用于区分是否可变。可变会更容易出错,所以尽量采用不可变设计,等到需要改变才改为 var 吧。

2. 尽量不用 !

!遇到 nil 时会 crash(包括 as! 进行强制转换)。可以使用 if let/guard let/case let 配合 as? 将可选值消化掉。可能返回 nil 的 API,为什么要自己骗自己呢?

当遇到 ObjC 代码暴露给 Swift 使用时,给接口 .h 文件加上 NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END 并检查接口参数是否可以为 nil 吧。

3. 多定义 struct,少定义 class

struct 是值类型,class 是引用类型。类类型分配在堆区,默认浅拷贝,容易被不经意间被改变,而值类型分配在栈区,默认深拷贝。并且 Swift 还有写时复制(copy on write)。

即使是使用 class 时,也仅在必要时(如桥接到 ObjC,使用 Runtime 一些特性)继承自 NSObject

4. 能用 Swift 标准库类型,尽量不用对应的 Foundation 类型

多使用 StringArrayDictionaryIntBool,少使用 Foundation 里面的 NSStringNSArrayNSDictionaryNSNumber。Cocoa Foundation 里面的都是类类型,而 Swift 标准库的是值类型,有很多标准库的方便方法。

还有用 print 代替 NSLog

5. 优先使用内置高阶函数

forEachmapconpactMapflatMapzipreduce 是好帮手,代替一些使用变量并在循环中处理的例子吧。用上高阶函数,不仅代码更清晰,还能将状态控制在更小的作用域内。

6. 使用 try catch 捕获错误

和 ObjC 基本都在函数的回调中返回 NSError 不一样,Swift 函数可以使用 throw 关键字抛出错误。

func test() throws {
    
//...
}

do {
try test()
} catch {
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值