ParseSwift 4.14.2

ParseSwift 4.14.2

Parse 平台 维护。



ParseSwift 4.14.2

  • 作者
  • Corey E. Baker

parse-repository-header-sdk-swift

iOS · macOS · watchOS · tvOS · Linux · Android · Windows


Build Status CI Build Status Release Coverage Carthage Pod

Swift Versions Platforms

Backers on Open Collective Sponsors on Open Collective License Forum Twitter


一个纯 Swift 库,可以从 Swift 应用程序中访问强大的 Parse Server 后端。

有关 Parse 平台及其功能的更多信息,请参阅公共文档。ParseSwift SDK 不是 Parse-SDK-iOS-OSX SDK 的端口,尽管有些可能看起来很熟悉,但它不具有向后兼容性,并使用 基于协议的编程 (POP) 和值类型 来设计,而不是 OOP 和引用类型。您可以通过观看 Swift 中的协议导向编程UIKit 应用中的协议和值导向编程 视频了解更多关于 POP 的信息,这些视频可以在之前的 WWDC 上找到。有关 ParseSwift 的更多信息,请访问 API 文档

要了解如何使用或实验 ParseSwift,您可以运行和编辑 ParseSwift.playground。您可以使用这个仓库中的 parse-server,该仓库以配置了连接到 playground 文件的 Docker Compose 文件(docker-compose up 将为您提供一个工作服务器),并集成了 Parse 仪表板,可以与 MongoDB 或 PostgreSQL 一起使用。您还可以通过编辑 Common.swift 中的配置来配置 Swift Playgrounds 以与您自己的 Parse Server 一同使用。要了解更多信息,请查看 CONTRIBUTING.md


安装

Swift Package Manager

您可以使用 Swift Package Manager (SPM) 通过将以下描述添加到您的 Package.swift 文件中来安装 ParseSwift

// swift-tools-version:5.5
import PackageDescription

let package = Package(
    name: "YOUR_PROJECT_NAME",
    dependencies: [
        .package(url: "https://github.com/parse-community/Parse-Swift", .upToNextMajor(from: "4.0.0")),
    ]
)

然后运行 swift build

您也可以通过在 Xcode 项目中转到“项目->您的项目名称->Swift Packages”并在搜索框中放置 https://github.com/parse-community/Parse-Swift.git 来使用 SPM 安装。

CocoaPods

将以下行添加到您的 Podfile 中

pod 'ParseSwift'

运行 pod install,您现在应该拥有主分支上的最新版本。

Carthage

将以下行添加到您的 Cartfile

github "parse-community/Parse-Swift"

运行 carthage update,您现在应该拥有 Carthage 文件夹中最新的 ParseSwift SDK 版本。

使用指南

安装 ParseSwift 后,首先在您的 AppDelegate.swift 中导入 import ParseSwift,然后在 application:didFinishLaunchingWithOptions: 方法中添加以下代码

ParseSwift.initialize(applicationId: "xxxxxxxxxx", clientKey: "xxxxxxxxxx", serverURL: URL(string: "https://example.com")!)

请查看 Swift Playground 获取更多信息。

LiveQuery

Query 是 Parse 平台中的一个核心概念。它允许您通过指定一些条件来检索 ParseObject,这使得构建仪表板、待办事项清单或甚至一些策略游戏类应用变得容易。然而,Query 基于拉取模型,不适合需要实时支持的 apps。

假设您正在构建一个应用程序,允许多个用户同时编辑同一文件。由于无法确定何时从服务器查询以获取更新,因此Query不是理想的工具。

为了解决这个问题,我们引入了Parse LiveQuery。该工具允许您订阅您感兴趣的Query。一旦订阅,服务器将实时通知客户端,每当创建了匹配QueryParseObject或更新它时。

设置服务器

Parse LiveQuery包含两部分,即LiveQuery服务器和LiveQuery客户端(此SDK)。要使用实时查询,您至少需要设置服务器。

设置LiveQuery服务器的最简单方法是使用开源Parse Server

使用客户端

使用Combine的SwiftUI视图模型

LiveQuery客户端界面基于订阅的概念。您可以为来自相关实时查询服务器的任何Query注册实时更新,并通过使用查询的subscribe属性将其用作 SwiftUI 视图的视图模型,简单地使用查询的subscribe属性

let myQuery = GameScore.query("points" > 9)

struct ContentView: View {

    //: A LiveQuery subscription can be used as a view model in SwiftUI
    @StateObject var subscription = myQuery.subscribe!
    
    var body: some View {
        VStack {

            if subscription.subscribed != nil {
                Text("Subscribed to query!")
            } else if subscription.unsubscribed != nil {
                Text("Unsubscribed from query!")
            } else if let event = subscription.event {

                //: This is how you register to receive notificaitons of events related to your LiveQuery.
                switch event.event {

                case .entered(let object):
                    Text("Entered with points: \(object.points)")
                case .left(let object):
                    Text("Left with points: \(object.points)")
                case .created(let object):
                    Text("Created with points: \(object.points)")
                case .updated(let object):
                    Text("Updated with points: \(object.points)")
                case .deleted(let object):
                    Text("Deleted with points: \(object.points)")
                }
            } else {
                Text("Not subscribed to a query")
            }

            Spacer()

            Text("Update GameScore in Parse Dashboard to see changes here")

            Button(action: {
                try? query.unsubscribe()
            }, label: {
                Text("Unsubscribe")
                    .font(.headline)
                    .background(Color.red)
                    .foregroundColor(.white)
                    .padding()
                    .cornerRadius(20.0)
                    .frame(width: 300, height: 50)
            })
        }
    }
}

或通过调用查询的subscribe(_: ParseLiveQuery)方法。如果您想更自定义视图模型,可以子类化Subscription或将订阅添加到您自己的视图模型中。您可以在Swift Playgrounds中测试 LiveQuery 订阅。

传统回调

您还可以使用异步回调来订阅LiveQuery

let myQuery = Message.query("from" == "parse")
guard let subscription = myQuery.subscribeCallback else {
    print("Error subscribing...")
    return
}

或通过调用查询的subscribeCallback(_: ParseLiveQuery)方法。

Message是一个ParseObject。

一旦订阅了查询,就可以对这些查询事件进行处理,如下所示

subscription.handleSubscribe { subscribedQuery, isNew in

    //Handle the subscription however you like.
    if isNew {
        print("Successfully subscribed to new query \(subscribedQuery)")
    } else {
        print("Successfully updated subscription to new query \(subscribedQuery)")
    }
}

可以处理LiveQuery中列出的任何事件,请参阅规范

subscription.handleEvent { _, event in
    // Called whenever an object was created
    switch event {

    case .entered(let object):
        print("Entered: \(object)")
    case .left(let object):
        print("Left: \(object)")
    case .created(let object):
        print("Created: \(object)")
    case .updated(let object):
        print("Updated: \(object)")
    case .deleted(let object):
        print("Deleted: \(object)")
    }
}

同样,您可以取消订阅并注册以在发生时收到通知

subscription.handleUnsubscribe { query in
    print("Unsubscribed from \(query)")
}

//: To unsubscribe from your query.
do {
    try query.unsubscribe()
} catch {
    print(error)
}

处理错误和其他事件的方式类似,请查看Subscription类获取更多信息。您可以在Swift Playgrounds中测试LiveQuery订阅。

高级用法

您不仅可以限定一个Live Query客户端,还可以创建多个ParseLiveQuery实例,使用证书认证和固定,接收每个客户端连接的指标,连接到单独的服务器URL,等等。

从Parse ObjC SDK迁移

请参阅《迁移指南》以帮助您从Parse ObjC SDK迁移。