iOS · macOS · watchOS · tvOS · Linux · Android · Windows
一个纯 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
。一旦订阅,服务器将实时通知客户端,每当创建了匹配Query
的ParseObject
或更新它时。
设置服务器
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迁移。