美文网首页
巧妙的写好您的Swift

巧妙的写好您的Swift

作者: 032c6843a285 | 来源:发表于2022-04-18 10:58 被阅读0次

引言

Swift 有很多其他语言所没有的独特的结构和方法,因此很多刚开始接触 Swift 的开发者并没有发挥它本身的优势。

所以,我们就来看一看那些让你的 Swift 代码更 Swift 的写法吧~

有条件的 for 循环

现在,我们要对view.subviews中的UIButton做一些不可描述的事情,用 for 循环怎么来遍历呢?
在下面的写法中,更推荐后面两种写法:

❌
for subView in view.subviews {
    if let button = subView as? UIButton {
        //不可描述的事情
    }
}

✅
for case let button as UIButton in view.subviews {
    //不可描述的事情
}

✅
for button in view.subviews where button is UIButton {
    //不可描述的事情
} 

enumerated()

在 Swift 中进行 for 循环,要拿到下标值,一般的写法要么定义局部变量记录下标值,要么遍历 0..<view.subviews.count。其实还有个更方便的写法:enumerated(),可以一次性拿到下标值和遍历的元素。
❌ 第一种肯定是不推荐的,因为还要定义额外的局部变量,容易出错,pass
✅ 第二种在只需要用到下标值的时候,是可以用的,但如果还要用到下标值对应的元素,就还得再取一次,麻烦,pass
✅ 第三种就比较完美,虽然一次性可以拿到下标值和元素,但其中一个用不到就可以用 _

❌
var index: Int = 0
for subView in view.subviews {
    //不可描述的事情
    index += 1
}

✅
for index in 0..<view.subviews.count {
    let subView = view.subviews[index]
    //不可描述的事情
}

✅
//index 和 subView 在循环体中都能使用到
for (index, subView) in view.subviews.enumerated() {
    //不可描述的事情
}

//只用到 index
for (index, _) in view.subviews.enumerated() {
    //不可描述的事情
}

//只用到 subView
for (_, subView) in view.subviews.enumerated() {
    //不可描述的事情
} 

first(where: )

filter 是 Swift 中几个高级函数之一,过滤集合中的元素时非常的好用,不过在某些情况下,比如获取集合中满足条件的第一个元素时,有一个更好的选择first(where: )

let article1 = ArticleModel(title: "11", content: "内容1", articleID: "11111", comments: [])

let article2 = ArticleModel(title: "11", content: "内容2", articleID: "22222", comments: [])

let article3 = ArticleModel(title: "33", content: "内容3", articleID: "3333", comments: [])

let articles = [article1, article2, article3]

❌
if let article = articles.filter({ $0.articleID == "11111" }).first {
    print("\(article.title)-\(article.content)-\(article.articleID)")
}

✅
if let article = articles.first(where: {$0.articleID == "11111"}) {
    print("\(article.title)-\(article.content)-\(article.articleID)")    //11-内容1-11111
} 

contains(where: )

这个和上面的first(where: )几乎一样,比如这里要判断文章列表里是否包含 articleID 为 11111 的文章:

❌
if !articles.filter({ $0.articleID == "11111" }).isEmpty {
    //不可描述的事情
}

✅
if articles.contains(where: { $0.articleID == "11111"}) {
    //不可描述的事情
} 

forEach

当循环体内的逻辑比较简单时,forEach 往往比 for...in...来的更加简洁:

func removeArticleBy(ID: String) {
    //删库跑路
}

❌
for article in articles {
    removeArticleBy(ID: $0.articleID)
}

✅
articles.forEach { removeArticleBy(ID: $0.articleID) }
 

结语

让我们的 Swift 代码更 Swift 的方法远不止上面这些,这里要说的是,平时写代码时,要刻意的使用 Swift 强大的特性,才能发挥它本身的价值。
而这些特性就需要大家去多看看官网的例子,或者一些主流的 Swift 第三方库,看看他们是如何运用 Swift 的特性的。

相关文章

  • 巧妙的写好您的Swift

    引言 Swift 有很多其他语言所没有的独特的结构和方法,因此很多刚开始接触 Swift 的开发者并没有发挥它本身...

  • 文章要写好,巧妙来引导

    孩子的文章是写出来的,写作方法是唤醒出来的。唤醒的方法来自于浅浅的小技巧。不管怎么样,做起来很重要。唐氏作坊社团...

  • protobuf-swift 的使用

    在swift项目目录中 写好Podfile 写法参见 https://cocoapods.org/pods/Pro...

  • Ubuntu 18.04 安装swift4.2.1

    Ubuntu 18.04 安装swift4.2.1 安装swift 确保您的系统上有最新的软件包列表 $ sudo...

  • swift 与 OC 混编

    前言: Swift语言出来后,可能新的项目直接使用Swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好...

  • Swift oc 混编 - oc导入Swift协议

    (默认已经设置好桥接头文件)1.在Swift文件中写好协议2.oc类文件中导入:"项目名-swift.h"格式的文...

  • Swift与OC混编

    swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或...

  • IOS --- OC与Swift混编

    swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或...

  • 致王老师的一首诗

    是您教我们, 怎样写好一个作文。 是您教我们, 怎样做好句...

  • Swift如何创建命名空间

    相比于OC时代的完全没有命名空间,Swift可以通过巧妙的办法,实现几乎等同于命名空间的效果。 需求 现在我们希望...

网友评论

      本文标题:巧妙的写好您的Swift

      本文链接:https://www.haomeiwen.com/subject/tofdertx.html