故事有点长。首先,让我展示一些无法按我预期工作的代码。
import SwiftUI
struct ContentView: View {
@State var isPresentingAlert = false
@State var isPresentingSheet = false
var body: some View {
VStack {
Button("Show Sheet") {
isPresentingSheet = true
}
}
.alert("Alert", isPresented: $isPresentingAlert) {}
.sheet(isPresented: $isPresentingSheet) {
Button("Show Alert") {
isPresentingAlert = true
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码的意图很明确:当用户按下“显示工作表”按钮时,视图应该显示一个工作表,并且工作表上有一个“显示警报”按钮,这应该会导致点击后显示警报窗口。代码被简化 - 在原始应用程序中,工作表向用户显示一个表单,并且当用户提交包含一些无效数据的表单时应显示警报。
但实际上,当我按下“显示警报”按钮时,警报并未显示。相反,我在控制台中收到以下错误:
2023-02-14 23:41:08.163349+0800 SheetAndAlert[8351:217492] [Presentation] Attempt to
present <SwiftUI.PlatformAlertController: 0x15b030600> on
<_TtGC7SwiftUI19UIHostingControllerGVS_15ModifiedContentVS_7AnyViewVS_12RootModifier__:
0x15b00aa00> (from
<_TtGC7SwiftUI19UIHostingControllerGVS_15ModifiedContentVS_7AnyViewVS_12RootModifier__:
0x15b00aa00>) which is already presenting
<_TtGC7SwiftUI29PresentationHostingControllerVS_7AnyView_: 0x15b02e000>.
Run Code Online (Sandbox Code Playgroud)
我不知道这个错误意味着什么。后来我更改了代码以使用 UIKIt's UIAlertController
,希望我可以解决该错误。(代码改编自这个答案:How do …
我正在进行整数字节级表示的赋值.我写了一个小程序:
e1.c
int main(void) {
printf("%d\n", -2147483648 < 2147483647);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我使用C89标准编译32位版本的可执行文件时,使用该命令gcc e1.c -m64 -std=c89 -g -O0 -o e1
,它按预期工作:它打印0
指示C编译器将值2147483648
视为unsigned int
,因此它将表达式的其余部分转换为unsigned int
.但奇怪的是,这种关系并不适用于打印的64位版本1
.
有谁能解释一下?
嗯......我的老师,我的一些同学和我将构建一个Debugger项目.我们希望我们的调试器是交互式的,也就是说,当输入代码时,结果将在几秒钟后的某个地方显示,并且结果会在输入代码更改时发生变化.另一方面,在运行时,我们可以回滚到前一行或断点.
按照我老师的说法,编程时会涉及"时间旅行调试"技术.我搜索了一些由其他人维护的项目,但我很难理解代码,并且在任何这些README文件中都没有介绍这种技术.
我很困惑哪种风格更适合在C中编写函数:
int function()
{
/*code block*/
return result;
}
Run Code Online (Sandbox Code Playgroud)
要么
void function(int *result)
{
/*code block*/
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,我第一个想到的是清晰的(和喜欢Java风格),但是当我看到一些C函数声明为第二风格,喜欢gets()
,shmget()
和我的算法课程的老师建议我写第二样式声明,就像create_Queue(Queue *q)
,我想知道第二个是否是C风格,我应该遵循.
我创建了一个小函数,将整数列表映射到它们的平方根。代码本身很简单:
f x = map sqrt [1..x]
Run Code Online (Sandbox Code Playgroud)
使用默认类型推断,它可以成功加载,但该函数可以接受Floating
类型类值,而我只是希望它接受Integer
s。所以我在它上面添加了一个类型注释。
f :: (Integral a, Floating b) => a -> [b]
f x = map sqrt [1..x]
Run Code Online (Sandbox Code Playgroud)
出乎我的意料,加载失败。在 GHCi 的 REPL 中抛出错误:
1.hs:48:7: error:
• Couldn't match type ‘a’ with ‘b’
‘a’ is a rigid type variable bound by
the type signature for:
f :: forall a b. (Integral a, Floating b) => a -> [b]
at 1.hs:47:1-41
‘b’ is a rigid type variable bound by
the type signature …
Run Code Online (Sandbox Code Playgroud)