置顶

菜鸟入门,各位大佬轻喷,如有谬误之处欢迎讨论建议,也欢迎各位道友与我同行

“不积跬步,无以至千里;不积小流,无以成江海”

继续

上文中我们实现了普通数据的本地持久化保存,包括存储与取消存储。

本文继续,开发总免不了引入第三方库,省事省力省心,所以本文我们来讨论第三方库的引入,以 ExytePopupView 库为例,实现 web 开发中常用的 toast 提醒。

准备工作

据了解,Swift开发的第三方库引入有三种方式

  • 一种是官方的包管理器 Apple Swift Packages Manager 一般会简称为 SPM
  • ios 第三方库冲突的处理 ios第三方ui库_ios 第三方库冲突的处理

  • 另一种是三方的包管理器 Cocoapods,终端命令为 pod
  • 还有一种是 Carthage

我所了解到的最常用的还是 Cocoapods

所以我们直接从它开始。

cocoapods 安装 与 初始化

介绍和包搜索地址 https://cocoapods.org

一、打开终端Terminal,执行安装命令:

sudo gem install cocoapods

二、在项目根目录新建 Podfile 文件,内容如下

// 版本13以上,因为ExytePopupView只支持13以上
platform :ios, '13.0'
use_frameworks!

// 注意修改项目名称
target 'helloworld' do
  pod "ExytePopupView"
end

三、在终端中,切换到项目根目录,执行命令:

pod install
  • 如果出现报错类似如下
# ...
RuntimeError - [Xcodeproj] Unknown object version.
# ...

那么执行如下命令,更新 cocoapods 之后再安装依赖

sudo gem install cocoapods --pre

再次报错

You don't have write permissions for the /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/gems/2.6.0 directory

执行

brew reinstall cocoapods

pod install

时间可能会比较长,耐心等待

执行完成后工作目录如下

ios 第三方库冲突的处理 ios第三方ui库_swift_02

使用

popup 库的仓库地址为 https://github.com/exyte/PopupView

该库也可以使用 Swift Package Manager 进行导入,后续再研究这种方式

根据官方的使用建议,我们将示例代码放到 IndexView.swift 中:

import SwiftUI
// import 我们导入的第三方包
import ExytePopupView

struct IndexView: View{
    // ...
    @State private var showToast:Bool = true;
    
    var body: some View{
        // ...
        VStack{
            // ...
        }
        //...
        .popup(isPresented: $showToast, type:.default, position: .bottom, autohideIn: 10.0, dragToDismiss: true){
            Text("The popup")
                .frame(width: 200, height: 200)
                .background(.gray)
                .foregroundColor(.white)
                .cornerRadius(20.0)
        }
    }
}

点击运行即可得到如下结果:

ios 第三方库冲突的处理 ios第三方ui库_ios 第三方库冲突的处理_03


我们往中间的内容放入文字,或者一个 loading图片即可实现 web 中常用的 Toast 提示 ,以及 Toast Loading

总结

  1. 本文介绍了 cocoapods 的基本使用。
  2. 用好三方包可以节省大量的时间,比如这个 popup
  3. 这个 popup 应该还需要再封装进行使用,不然每个页面都这么写,还是很费劲的。
  4. Cocoapods 里面搜到的很多库都是基于 UIView 进行扩展的,并不能直接在SwiftUI中使用,需要实现 UIViewControllerRepresentable 之后才行,后续再来讨论这个问题。
  5. 建议还是尽量找能支持 SwiftUI的库。
  6. 下章我们来讨论 Popup 的封装,将它封装成 web 中常用的方式。