小编SqA*_*org的帖子

Swift Combine:使用其他发布者的后续发布者(使用CombineLatest)不会“触发”

我正在尝试复制 WWDC 2019 会议“实践中的结合” https://developer.apple.com/videos/play/wwdc2019/721/ 中从 22:50 开始使用的“Wizard School Signup”示例SwiftUI(与会话期间使用的 UIKit 相对)。

我已经创建了示例中的所有发布者:validatedEMail、validatedPassword 和validatedCredentials。虽然validatedEMail 和validatedPassword 工作得很好,但使用CombineLatest 消耗两个发布者的validatedCredentials 永远不会触发

//
//  RegistrationView.swift
//
//  Created by Lars Sonchocky-Helldorf on 04.07.19.
//  Copyright © 2019 Lars Sonchocky-Helldorf. All rights reserved.
//

import SwiftUI
import Combine

struct RegistrationView : View {
    @ObjectBinding var registrationModel = RegistrationModel()

    @State private var showAlert = false
    @State private var alertTitle: String = ""
    @State private var alertMessage: String = ""

    @State private var registrationButtonDisabled = true …
Run Code Online (Sandbox Code Playgroud)

swift ios13 swiftui combine

5
推荐指数
1
解决办法
6857
查看次数

Swift Joint:这些多播函数的用途是什么以及如何使用它们?

在努力解决一些联合收割机问题时,我遇到了https://developer.apple.com/documentation/combine/publisher中的“使用多个订阅者”部分:

func multicast<S>(() -> S) -> Publishers.Multicast<Self, S>

func multicast<S>(subject: S) -> Publishers.Multicast<Self, S>
Run Code Online (Sandbox Code Playgroud)

然而,当我试图确认我的假设时,在发送给多个订阅者时需要多播,我发现在尝试这个游乐场代码时这是不必要的(修改自https://github.com/AvdLee/CombineSwiftPlayground/blob/ ) master/Combine.playground/Pages/Combining%20Publishers.xcplaygroundpage/Contents.swift)(在 Xcode 版本 11.0 beta 3 (11M362v) 中的 10.14.5 上运行):

enum FormError: Error { }

let usernamePublisher = PassthroughSubject<String, FormError>()
let passwordPublisher = PassthroughSubject<String, FormError>()

let validatedCredentials = Publishers.CombineLatest(usernamePublisher, passwordPublisher)
    .map { (username, password) -> (String, String) in
        return (username, password)
    }
    .map { (username, password) -> Bool in
        !username.isEmpty && !password.isEmpty && password.count > 12
    }
    .eraseToAnyPublisher()

let firstSubscriber = …
Run Code Online (Sandbox Code Playgroud)

swift ios13 combine macos-catalina

4
推荐指数
1
解决办法
3343
查看次数

标签 统计

combine ×2

ios13 ×2

swift ×2

macos-catalina ×1

swiftui ×1