Combine 框架下的 AWS Amplify for Swift / SwiftUI 令人头疼
AWS Amplify for Swift / SwiftUI under Combine framework cause headache
有人 copy/sample 将 AWS Amplify 与 Combine 框架结合使用吗?
提供的样品
https://docs.amplify.aws/lib/datastore/data-access/q/platform/ios
https://docs.amplify.aws/lib/auth/getting-started/q/platform/ios#configure-auth-category
看起来真的很简单,我正在逐字使用它,但由于我不太精通 Combine,可能是我失去了水槽,尤其是当这些函数被放置在 Observable class 中时。
并且在进行 URL 会话时,我的尝试产生了相同的错误负载:
Error Domain=NSCocoaErrorDomain Code=4099 “与名为 com.apple.commcenter.coretelephony.xpc 的 pid 0 上的服务的连接已从此进程失效。” UserInfo={NSDebugDescription=与名为 com.apple.commcenter.coretelephony.xpc 的 pid 0 上的服务的连接已从此进程失效。}
以下示例展示了如何使用用户名和密码登录:
import SwiftUI
import Combine
import Amplify
enum AuthState {
case signUp
case login
case confirmCode(email: String)
case session(user: AuthUser)
}
final class SessionManager: ObservableObject {
@Published var authState: AuthState = .login
var storage = Set<AnyCancellable>()
func getCurrentAuthUser() {
if let user = Amplify.Auth.getCurrentUser() {
DispatchQueue.main.async {
self.authState = .session(user: user)
}
} else {
DispatchQueue.main.async {
self.authState = .login
}
}
}
func signIn(email: String, password: String) {
Amplify.Auth.signIn(username: email, password: password)
.resultPublisher
.receive(on: DispatchQueue.main)
.sink(
receiveCompletion: {
if case .failure(let error) = [=10=] {
print("Sign in error: \(error)")
}
}) { result in
self.getCurrentAuthUser()
}.store(in: &self.storage)
}
}
我在模拟器上测试时遇到了同样的错误,但是在设备上测试消除了它。
此外,Don 的示例展示了如何使用 .store(in: &self.storage)
处理 sink
调用的结果。这是必需的,放大文档显示得不是很好。
有人 copy/sample 将 AWS Amplify 与 Combine 框架结合使用吗?
提供的样品 https://docs.amplify.aws/lib/datastore/data-access/q/platform/ios https://docs.amplify.aws/lib/auth/getting-started/q/platform/ios#configure-auth-category 看起来真的很简单,我正在逐字使用它,但由于我不太精通 Combine,可能是我失去了水槽,尤其是当这些函数被放置在 Observable class 中时。
并且在进行 URL 会话时,我的尝试产生了相同的错误负载:
Error Domain=NSCocoaErrorDomain Code=4099 “与名为 com.apple.commcenter.coretelephony.xpc 的 pid 0 上的服务的连接已从此进程失效。” UserInfo={NSDebugDescription=与名为 com.apple.commcenter.coretelephony.xpc 的 pid 0 上的服务的连接已从此进程失效。}
以下示例展示了如何使用用户名和密码登录:
import SwiftUI
import Combine
import Amplify
enum AuthState {
case signUp
case login
case confirmCode(email: String)
case session(user: AuthUser)
}
final class SessionManager: ObservableObject {
@Published var authState: AuthState = .login
var storage = Set<AnyCancellable>()
func getCurrentAuthUser() {
if let user = Amplify.Auth.getCurrentUser() {
DispatchQueue.main.async {
self.authState = .session(user: user)
}
} else {
DispatchQueue.main.async {
self.authState = .login
}
}
}
func signIn(email: String, password: String) {
Amplify.Auth.signIn(username: email, password: password)
.resultPublisher
.receive(on: DispatchQueue.main)
.sink(
receiveCompletion: {
if case .failure(let error) = [=10=] {
print("Sign in error: \(error)")
}
}) { result in
self.getCurrentAuthUser()
}.store(in: &self.storage)
}
}
我在模拟器上测试时遇到了同样的错误,但是在设备上测试消除了它。
此外,Don 的示例展示了如何使用 .store(in: &self.storage)
处理 sink
调用的结果。这是必需的,放大文档显示得不是很好。