我刚刚“升级”到最新的 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 并清除它的缓存。这个问题甚至在一个全新的项目中表现出来 - 即它与我的代码无关,
任何想法我可能会遇到麻烦吗?
之间有什么区别:
Task { await MainActor.run { ... } }
Run Code Online (Sandbox Code Playgroud)
和
Task { @MainActor in ... }
Run Code Online (Sandbox Code Playgroud) 我正在构建一个经典的数据库支持的动态网站,它将允许用户共享潜在客户.
我有点老了,想要使用纯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.
对不起,如果其中一些是非常基本的,但我对后端更加满意,但希望前端也能很好地设计,并且最大限度地分担责任.
谢谢你的想法!
当我运行正在开发的基于 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)
还有其他人看过这个吗?我是否不小心打开了诊断工具,或者我做错了什么?
创建符合 的类时ReferenceFileDocument,如何指示文档需要保存。即相当于 的NSDocument方法updateChangeCount?
我试图理解一种设计模式,用于从 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,并在主线程上更新自身,但会出现编译时错误 …
如何向需要与 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) 在阅读 Apple 关于不透明类型的Swift 编程语言指南时,有一段我不明白。该指南讨论了不透明类型和协议之间的差异,并指出不能嵌套返回协议类型的调用。他们使用这个代码片段,其中 Shape 是一个协议:
\nfunc protoFlip<T: Shape>(_ shape: T) -> Shape {\n if shape is Square {\n return shape\n }\n\n return FlippedShape(shape: shape)\n}\nRun Code Online (Sandbox Code Playgroud)\n然后它指出:
\n\n\n这种方法的另一个问题是形状变换不嵌套。翻转三角形的结果是 Shape 类型的值,并且 protoFlip( :) 函数采用符合 Shape 协议的某种类型的参数。但是,协议类型的值不符合该协议;protoFlip( :) 返回的值不符合 Shape。这意味着像 protoFlip(protoFlip(smallTriange)) 这样应用多个变换的代码是无效的,因为翻转的形状不是 protoFlip(_:) 的有效参数\xe2\x80\x99t。
\n
但是,我写了这段代码:
\nimport 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()\nRun Code Online (Sandbox Code Playgroud)\n这编译并运行......并且似乎让我嵌套这些调用。
\n我理解错了什么?文档试图说明什么? …
我想知道如何在 Xcode 13 中生成英文基本案例 Localized.strings 文件而不使用 genstrings。
我正在使用新的编译器支持提取字符串进行本地化,然后导出->翻译->通过文件导入.xcloc。除了一个问题之外,所有这些都运行良好......
我很难让它以开发语言创建初始的 Localized.strings 文件,即en在我的例子中。当我尝试导入相关en.xcloc文件时,没有任何反应。我可以毫无问题地导入其他语言。
以下是我正在采取的步骤:
按预期正确创建en.xcloc文件内容,选取要本地化的文本。
en.xcloc文件这没有任何作用。所以我尝试以下操作:
English - Development Language和French选项fr.xcloc文件并添加所需的翻译fr.xcloc文件Localizable.strings文件出现了 - 这当然是法语版本en.xcloc文件仍然没有任何作用我想我的出发点是,因为不必依赖 Xcode 13 中的 …
我正在尝试创建我自己的 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”
如何让参与者遵守协议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) 我有以下组件:
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 …
swift ×6
swiftui ×6
concurrency ×3
reactjs ×2
xcode ×2
button ×1
localization ×1
opaque-types ×1
vapor ×1