小编thi*_*ezn的帖子

@Published 属性包装器不适用于 ObservableObject 的子类

我有一个符合@ObservableObject 协议的类,并从它创建了一个子类,它有自己的变量,带有@Published 属性包装器来管理状态。

使用子类时似乎忽略了@published 属性包装器。有谁知道这是否是预期行为以及是否有解决方法?

我正在运行 iOS 13 Beta 8 和 xCode Beta 6。

这是我所看到的一个例子。更新MyTestObjectText 视图上的 TextField 时,会使用 aString 值正确更新。如果我更新MyInheritedObjectTextField,则不会在 Text 视图中更新 anotherString 值。

import SwiftUI

class MyTestObject: ObservableObject {
    @Published var aString: String = ""

}

class MyInheritedObject: MyTestObject {
    @Published var anotherString: String = ""
}

struct TestObserverWithSheet: View {
    @ObservedObject var myTestObject = MyInheritedObject()
    @ObservedObject var myInheritedObject = MyInheritedObject()

    var body: some View {
        NavigationView {
            VStack(alignment: .leading) {
                TextField("Update aString", text: self.$myTestObject.aString) …
Run Code Online (Sandbox Code Playgroud)

inheritance ios swift ios13 swiftui

30
推荐指数
2
解决办法
6870
查看次数

SwiftUI - NavigationSplitView 内的 NavigationStack 内的嵌套链接不起作用

我正在尝试 ipadOS16/macOS13 中提供的新导航 API,但在弄清楚如何在 macOS 13 上将 NavigationSplitView、NavigationStack 和 NavigationLink 组合在一起时遇到了一些麻烦(在 Macbook Pro M1 上进行测试)。相同的代码在 ipadOS 上可以正常工作。

我正在使用两列 NavigationSplitView。在“详细信息”部分中,我有一个SampleModel1包含在 NavigationStack 中的实例列表。在列表中,我已为SampleModel1SampleModel2实例应用了 navigationDestination。

SampleModel1当我从列表中选择一个实例时,我会导航到一个详细视图,该视图本身包含一个SampleModel2实例列表。我的目的是在单击其中一个实例时进一步导航到 NavigationStack SampleModel2,但不幸的是这似乎不起作用。实例SampleModel2是可选择的,但没有发生导航。

当我完全删除 NavigationSplitView 并仅使用 NavigationStack 时,问题不会出现,并且我可以成功导航到SampleModel2实例。

这是我的示例代码:


import SwiftUI

@main
struct testingnavigationApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

// Sample model definitions used to trigger navigation with navigationDestination API.
struct SampleModel1: Hashable, Identifiable …
Run Code Online (Sandbox Code Playgroud)

swift swiftui swiftui-navigationsplitview macos-ventura

9
推荐指数
1
解决办法
4616
查看次数

使用队列的Asyncio persisent客户端协议类

我试图了解Python 3 asyncio模块,特别是使用传输/协议API.我想创建一个发布/订阅模式,并使用asyncio.Protocol该类来创建我的客户端和服务器.

目前,我已启动并运行服务器,并侦听传入的客户端连接.客户端能够连接到服务器,发送消息并接收回复.

我希望能够保持TCP连接存活并维护一个允许我添加消息的队列.我试图找到一种方法来使用低级API(传输/协议),但有限的asyncio docs/examples online似乎都进入了高级API - 使用流等等.有人能够指出我如何实现这个目标的正确方向?

这是服务器代码:

#!/usr/bin/env python3

import asyncio
import json


class SubscriberServerProtocol(asyncio.Protocol):
    """ A Server Protocol listening for subscriber messages """

    def connection_made(self, transport):
        """ Called when connection is initiated """

        self.peername = transport.get_extra_info('peername')
        print('connection from {}'.format(self.peername))
        self.transport = transport

    def data_received(self, data):
        """ The protocol expects a json message containing
        the following fields:

            type:       subscribe/unsubscribe
            channel:    the name of the channel

        Upon receiving a valid message the protocol registers
        the …
Run Code Online (Sandbox Code Playgroud)

python tcp python-asyncio

8
推荐指数
1
解决办法
2934
查看次数