小编Phi*_*den的帖子

Xcode 12.2 beta 3 / Big Sur Beta 10 为 SwiftUI 应用程序抛出 SIGCONT

我刚刚“升级”到最新的 Big Sur – 11.0 Beta (20A5395g) – 和 Xcode betas – 12.2 beta 3 (12B5035g)。当我尝试运行任何基于 SwiftUI 的 Mac 应用程序时,程序会停止并显示一条Thread 1: signal SIGCONT消息。有时我可以继续(Ctrl Command Y),但其他人程序停止并显示消息Message from debugger: Terminated due to signal 19

堆栈跟踪表明问题出在 ImageLoader 中。

我试过重新安装 Xcode 并清除它的缓存。这个问题甚至在一个全新的项目中表现出来 - 即它与我的代码无关,

任何想法我可能会遇到麻烦吗?

xcode swiftui

15
推荐指数
2
解决办法
884
查看次数

15
推荐指数
1
解决办法
2985
查看次数

整合蒸汽和反应

我正在构建一个经典的数据库支持的动态网站,它将允许用户共享潜在客户.

我有点老了,想要使用纯MVC架构来实现我的系统.我正在考虑在纯粹的'V'模式下使用React,Vapor履行'M'和'C'角色.我需要一些帮助来理解如何集成Vapor和React,或者更精确地确定哪些功能最适合驻留.

我的Vapor服务器端应用程序,处理所有安全性,路由,模型(通过Fluent存储在PostgreSQL数据库中)和模型控制器.模型控制器仅向通过中间件层的请求输出纯JSON响应:检查用户访问"命令"的权限(基于数据库中保存的角色配置文件,允许动态更改权限); 验证访问关联记录的权限(基于他们可以成为的组的层次结构); 并记录用户正在执行的操作.

到目前为止,我一直在使用Leaf模板引擎为用户使用的网站生成.html文件.Leaf模板通常只传递一个或两个属性 - 比如将要显示的记录的id,然后我使用一些javascript通过AJAX调用将数据拉回模型控制器.模型控制器和中间件可以访问cookie以满足所有用户身份验证/会话相关的需求.这样可以在模型和视图之间保持非常清晰的分离,并且可以让我更轻松地构建一个称为将来调用模型RESTful接口的移动应用程序.

现在我正在考虑使用React进行Web前端,使用React-Bootstrap库.但说实话,我有点迷失了如何正确地整合这个.例如,渲染页面以显示记录 - 如何传递记录ID(伪代码警告!):

a)我应该创建一个叶子模板,我将id作为参数传递给它.模板只需要一小段javascript就可以将参数传递给react.js脚本?蒸汽方面看起来像:

drop.get("viewRecord", myObject) { request in
    let parameters = try Node(node:["objectId": myObject?.id.makeNode()])
    return try webApp.view.make("viewObject", parameters)
}
Run Code Online (Sandbox Code Playgroud)

而.leaf模板有点像:

<script ...>
    var objectID = #(viewObject.id)
</script>
Run Code Online (Sandbox Code Playgroud)

b)或者我应该进行调用,例如,我将id作为URL参数传递,然后我将使用一些小的javascript提取并传递给react组件:

drop.get("viewRecord", myObject) { request in
     return Response(redirect: "/viewObject.html", myObject?.Id)
}
Run Code Online (Sandbox Code Playgroud)

c)Vapor中的其他方式?我错过了React的观点吗?我认为它的目的是关注前端和后端不可知,但React Router建议它也需要一些后端工作吗?

d)放弃反应,并说贴叶?

在最后一点 - 如果我采用React方式,我是否会为每个"屏幕"创建一个.jsx文件(转换为.js),我会为其构建一个叶子模板?如果是这样,我将如何通过引用公共元素(例如react和react-bootstrap组件)来减少文件大小.目前我正在使用Webpack生成一个.js文件.我假设我不会使用React路由器,因为我使用Vapor.

对不起,如果其中一些是非常基本的,但我对后端更加满意,但希望前端也能很好地设计,并且最大限度地分担责任.

谢谢你的想法!

reactjs swift vapor

12
推荐指数
2
解决办法
1512
查看次数

SwiftUI 控制台显示 CVDisplayLink 相关消息?

当我运行正在开发的基于 MacOS 的 SwiftUI 应用程序时,我在控制台上收到大量输出,例如:

2021-12-08 12:40:14.439565+0000 SpDriveApp[6801:159299] [] [0x7fe6e7830820] CVCGDisplayLink::setCurrentDisplay: 1892262333
2021-12-08 12:40:14.439785+0000 SpDriveApp[6801:159299] [] [0x7fe6e7830800] CVDisplayLinkCreateWithCGDisplays count: 1 [displayID[0]: 0x70c9a1bd] [CVCGDisplayLink: 0x7fe6e7830820]
2021-12-08 12:40:14.439827+0000 SpDriveApp[6801:159299] [] [0x7fe6e7830800] CVDisplayLinkStart
2021-12-08 12:40:14.439853+0000 SpDriveApp[6801:159299] [] [0x7fe6e7830820] CVDisplayLink::start
2021-12-08 12:40:14.439993+0000 SpDriveApp[6801:182706] [] [0x60000f698460] CVXTime::reset
Run Code Online (Sandbox Code Playgroud)

还有其他人看过这个吗?我是否不小心打开了诊断工具,或者我做错了什么?

swiftui

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

SwiftUI - ReferenceFileDocument - 无法指示文档需要保存

创建符合 的类时ReferenceFileDocument,如何指示文档需要保存。即相当于 的NSDocument方法updateChangeCount

swiftui

7
推荐指数
1
解决办法
1719
查看次数

从 SwiftUI 视图中访问参与者的隔离状态

我试图理解一种设计模式,用于从 SwiftUI 视图中访问参与者类型中保存的隔离状态。

采取这个简单的代码:

actor Model: ObservableObject {
    @Published var num: Int = 0
    
    func updateNumber(_ newNum: Int) {
        self.num = newNum
    }
}

struct ContentView: View {
    @StateObject var model = Model()
    
    var body: some View {
        Text("\(model.num)") // <-- Compiler error: Actor-isolated property 'num' can not be referenced from the main actor
        Button("Update number") {
            Task.detached() {
                await model.updateNumber(1)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Actor-isolated property 'num' can not be referenced from the main actor可以理解的是,当我尝试访问隔离值时,我收到了编译器错误。但我不明白如何在视图中显示这些数据。我想知道我是否需要一个 ViewModel 来观察 actor,并在主线程上更新自身,但会出现编译时错误 …

concurrency swift swiftui

7
推荐指数
2
解决办法
3786
查看次数

使 @MainActor 类或 actor 符合 Codable

如何向需要与 MainActor 隔离的类添加 Codable 一致性?

例如,以下代码会给出编译器错误:

@MainActor final class MyClass: Codable {
    var value: Int
    
    enum CodingKeys: String, CodingKey {
        case value
    }
    
    init(from decoder: Decoder) throws { // <-- Compiler error: Initializer 'init(from:)' isolated to global actor 'MainActor' can not satisfy corresponding requirement from protocol 'Decodable'
        let data = try decoder.container(keyedBy: CodingKeys.self)
        self.value = try data.decode(Int.self, forKey: .value)
    }
    
    func encode(to encoder: Encoder) throws { // <-- Compiler error: Instance method 'encode(to:)' isolated to global actor 'MainActor' can not …
Run Code Online (Sandbox Code Playgroud)

concurrency swift swiftui swift-concurrency

6
推荐指数
1
解决办法
1052
查看次数

Swift 不透明类型与协议 - 文档推断协议的 func 不能嵌套

在阅读 Apple 关于不透明类型的Swift 编程语言指南时,有一段我不明白。该指南讨论了不透明类型和协议之间的差异,并指出不能嵌套返回协议类型的调用。他们使用这个代码片段,其中 Shape 是一个协议:

\n
func protoFlip<T: Shape>(_ shape: T) -> Shape {\n    if shape is Square {\n        return shape\n    }\n\n    return FlippedShape(shape: shape)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

然后它指出:

\n
\n

这种方法的另一个问题是形状变换不嵌套。翻转三角形的结果是 Shape 类型的值,并且 protoFlip( :) 函数采用符合 Shape 协议的某种类型的参数。但是,协议类型的值不符合该协议;protoFlip( :) 返回的值不符合 Shape。这意味着像 protoFlip(protoFlip(smallTriange)) 这样应用多个变换的代码是无效的,因为翻转的形状不是 protoFlip(_:) 的有效参数\xe2\x80\x99t。

\n
\n

但是,我写了这段代码:

\n
import Foundation\n\nprotocol P {\n    associatedtype  AT\n}\n\n\nstruct C: P {\n    typealias AT = Int\n}\n\nfunc f<T: P>(_ t: T) -> T {\n    t\n}\n\nfunc g() {\n    f(f(C()))\n}\n\ng()\n
Run Code Online (Sandbox Code Playgroud)\n

这编译并运行......并且似乎让我嵌套这些调用。

\n

我理解错了什么?文档试图说明什么? …

swift opaque-types

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

XCode 13 - 生成用于开发语言的 Localized.strings 文件(在我的例子中是英语),而不使用 genstrings

我想知道如何在 Xcode 13 中生成英文基本案例 Localized.strings 文件而不使用 genstrings。

我正在使用新的编译器支持提取字符串进行本地化,然后导出->翻译->通过文件导入.xcloc。除了一个问题之外,所有这些都运行良好......

我很难让它以开发语言创建初始的 Localized.strings 文件,即en在我的例子中。当我尝试导入相关en.xcloc文件时,没有任何反应。我可以毫无问题地导入其他语言。

以下是我正在采取的步骤:

  1. 用一段可以本地化的文本编写一些基本代码
  2. 选择产品 -> 导出本地化...并选择英语 - 开发语言

按预期正确创建en.xcloc文件内容,选取要本地化的文本。

  1. 选择“产品”->“导入本地化...”并重新导入英文en.xcloc文件

这没有任何作用。所以我尝试以下操作:

  1. 转到Project的文件 -> Info 选项卡并添加一种新语言,例如 (Fr)
  2. 选择产品 -> 导出本地化...并选择English - Development LanguageFrench选项
  3. 打开fr.xcloc文件并添加所需的翻译
  4. 返回Xcode并导入fr.xcloc文件
  5. 现在Localizable.strings文件出现了 - 这当然是法语版本
  6. 导入en.xcloc文件仍然没有任何作用
  7. 如果我打开右侧的文件检查器,我可以单击添加英文版本,但它只是复制法文版本(这会导致许多其他问题)...

我想我的出发点是,因为不必依赖 Xcode 13 中的 …

xcode localization

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

SwiftUI - 在视图中包装 Button,以创建自定义按钮

我正在尝试创建我自己的 Button 版本,方法是将其包装在视图中,从而打开添加更多功能/隐藏样式修饰符的能力。我知道这不会带来好处,而且 ButtonStyles 很强大。但是为了超级干净的代码,我很好奇它是如何实现的。

在最精简的形式中,我想写一些类似的东西(基于 Button 自己的签名):

struct MyCustomButton: View {
    let action : () -> Void
    let contents : () -> PrimitiveButtonStyleConfiguration.Label

    var body : some View {
        Button(action: self.action) {
            self.contents()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试使用它时......

struct MyView : View {
    var body : some View {
        MyCustomButton(action: { doSomething() }) {
            Text("My custom button")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

...我收到以下编译错误:无法将“文本”类型的值转换为关闭结果类型“PrimitiveButtonStyleConfiguration.Label”

button swiftui

3
推荐指数
1
解决办法
1117
查看次数

使 Actor 符合 Sequence 协议

如何让参与者遵守协议Sequence?以下代码生成编译器警告:

与全局参与者“MainActor”隔离的实例方法“makeIterator()”无法满足协议“Sequence”的相应要求

@MainActor class Test: Sequence {
    private var contents: [Int] = []
    
    func makeIterator() -> Array<Int>.Iterator {
        contents.makeIterator()
    }
}
Run Code Online (Sandbox Code Playgroud)

concurrency swift swift-concurrency

3
推荐指数
1
解决办法
3252
查看次数

反应错误 - 无法分配给对象“#&lt;Object&gt;”的只读属性“validated”

我有以下组件:

export const Alert = (props: {message: string, type?: AlertType, createAgainButton?: Object} ) =>
{

const type = props.type || 'Message'

switch(type)
    {
        case 'Warning':
            return (
                <div className='tgg-alert-danger'>
                    <div className='tgg-alert-icon'><Icon name='exclamation-circle'/></div>
                    <div className='tgg-alert-text'>{props.message}</div>
                </div> )
        case 'Spinner':
            return (
                <div className='tgg-alert-danger'>
                    <div className='tgg-alert-icon'><Icon name='circle-o-notch fa-spin'/></div>
                    <div className='tgg-alert-text'>{props.message}</div>
                </div>)
        default:
            return (
                <div className='tgg-alert-success'>
                    <div className='tgg-alert-icon'><Icon name='check-circle'/></div>
                    <div className='tgg-alert-text'>{props.message}</div>
                    { props.createAgainButton }
                </div>)
    }
}
Run Code Online (Sandbox Code Playgroud)

对于默认情况,有时我的代码会引发以下 React 错误:

Cannot assign to read only property 'validated' of object '#<Object>'
Run Code Online (Sandbox Code Playgroud)

据报告,该错误位于 React …

reactjs

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