我想知道为什么我们应该创建并使用带有 UIKit 生命周期的 SwiftUI 界面?我对此感到困惑!因为:
1-如果你想要 UIKit 编程,那么去选择 Storyboard 作为 Interface,然后选择 UIKit 作为 Life Cycle。
2-如果您想要 SwiftUI 编程,请选择 SwiftUI 作为接口,然后选择 SwiftUI 作为生命周期。
3-如果您想更改 Swift 语言,请将其更改为 Objective-C,您将获得 Storyboard 作为界面和 UIKit 作为生命周期。
选项 4 来了:
4-您可以将 SwiftUI for Interface 和 UIKit 作为生命周期!这就是这个问题的主题!如果我没记错的话,SwiftUI 处理的东西与 UIKit 不同,我们不需要在 SwiftUI 中定义委托或协议或类似的东西,但为什么我们在这种情况下得到AppDelegate和SceneDelegate !如果我们创建这样一个 Xcode 项目,有什么优点和缺点?
我正在使用 tabView 的简单代码。当我更改模拟器的方向时,应用程序选项卡会向后跳一个选项卡。就像这样,如果您在第 2 页转到第 1 页,但无论我如何更改方向,它都必须保留在第 2 页。或者如果您在第 3 页,则跳转到第 2 页。为什么会发生这种不需要的跳转?
struct ContentView: View {
@State var currentPage: Int = 1
var body: some View {
ZStack
{
Color.gray.ignoresSafeArea()
TabView(selection: $currentPage)
{
Text("Hi 1").tag(0)
Text("Hi 2").tag(1)
Text("Hi 3").tag(2)
}
.indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .never))
.tabViewStyle(PageTabViewStyle())
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想要模糊效果作为我的视图的背景,正如我们所知,我们可以模糊视图和里面的内容,但我不想要模糊视图内容,但我想要模糊背景视图来提供玻璃般的模糊效果,如下所示我们知道。我如何在 SwiftUi 中做到这一点?
换句话说,视图的下层将在当前视图上的帧中模糊,该视图设置为当前视图的背景。
我想知道如何关闭或退出我的应用程序?我还有一些用于关闭应用程序的代码,但代码看起来不现代并且更新为 SwiftUI,我们是否有一些新的更好的代码?
import SwiftUI
@main
struct Work_Space_macOSApp: App {
var body: some Scene {
WindowGroup {
VStack {
Button("Close App") {
// Do we have more SwifUI-ish code for closing App?
NSApplication.shared.keyWindow?.close()
}
Button("Quit App") {
// How can I quit the app?
}
}
.frame(width: 200, height: 200)
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个LazyVStack我只想更新一个视图而不是重新加载屏幕上的所有其他视图的视图。对于更复杂的单元,这会导致性能大幅下降。我已经包含了示例代码
import SwiftUI
struct ContentView: View {
@State var items = [String]()
var body: some View {
ScrollView {
LazyVStack {
ForEach(self.items, id: \.self) { item in
Button {
if let index = self.items.firstIndex(where: {$0 == item}) {
self.items[index] = "changed \(index)"
}
} label: {
cell(text: item)
}
}
}
}
.onAppear {
for _ in 0...200 {
self.items.append(NSUUID().uuidString)
}
}
}
}
struct cell: View {
let text: String
init(text: String) {
self.text = text
print("init …Run Code Online (Sandbox Code Playgroud) 我想将 2 个 CGPoints 加在一起,然后我意识到没有为此定义函数,所以我把它写下来,我希望专业人士看看这个代码是否有任何错误或改进,但后来我脑子里出现了一个大问题,是吗?这么多的工作、编码和定制苹果都没有完成吗?我错过了什么吗?每个在 Swift 中使用 CGPoint 的人在某些时候都需要对其进行数学计算,那么为什么我们一开始就没有它呢?也感谢您查看代码并更正。
extension CGPoint {
static func + (lhs: CGPoint, rhs: CGPoint) -> CGPoint {
return CGPoint(x: lhs.x + rhs.x, y: lhs.y + rhs.y)
}
}
Run Code Online (Sandbox Code Playgroud)
向LeoDabus大声喊叫:更新:+=
extension CGPoint {
static func += (lhs: inout CGPoint, rhs: CGPoint) {
lhs = lhs + rhs
}
}
Run Code Online (Sandbox Code Playgroud) 我是 swift 的新手,这可能是一个愚蠢的问题,但它让我困惑了很长时间。这是我的代码,我通过模仿 WWDC 2020 的 swiftUI 介绍中的三明治示例来编写此代码。
import SwiftUI
struct movieDetail: View {
var idnum:Int
var body: some View {
Text(idnum)
}
}
struct movieDetail_Previews: PreviewProvider {
static var previews: some View {
NavigationView {
movieDetail(idnum:24428)
}
}
}
Run Code Online (Sandbox Code Playgroud)
当它显示为编译错误时:
对初始化程序的调用中没有完全匹配。
WWDC 2020 的示例如下
import SwiftUI
struct sandwichdetail: View {
var sandwich:Sandwich
@State private var zoomed = false
var body: some View {
VStack {
Text(sandwich.name)
}
.navigationTitle(sandwich.name)
.edgesIgnoringSafeArea(.bottom)
}
}
struct sandwichdetail_Previews: PreviewProvider {
static var previews: some …Run Code Online (Sandbox Code Playgroud) 有时,我需要记录选择方法或记录框架或应用程序的当前问题或错误,甚至未来的代码更新或新目标的重要决策!这一切都是私有的,仅供开发人员使用,我使用 *.txt 文件,然后将其更新为 *.md 文件。但是使用 *.md 文件并不是我想要的全部,例如,对于大标题,我们应该#在标题之前使用,但是当我想阅读它时, 的符号#是可见的,这有点烦人。像这样:
我不得不说我不想为函数或结构或其他东西制作文档。我只想输入一些有关应用程序本身的文字。#当我需要读取 *.md 文件时,如何在渲染模式下将其删除。我知道有一个关于游乐场的选项,但我不想使用它。我认为 *.md 文件非常适合我的用例,如果我能让它看起来更好,我也不知道如何添加链接或使文本加粗或将图片添加到我的 *.md 文件中。同样,这个 *.md 文件仅供我使用,它不会像 GitHub 那样在项目内部保持私有。
我在 Xcode 版本 14.1 中遇到了有关 macOS 中视图大小的新更改,在旧版本中,如果我给出帧大小或使用固定大小修饰符,视图将保持该大小,但在 14.1 中,我发现视图可能会扩展,即使我使用frame或fixedSize修饰符,这不是我所期望的。例如,我举了一个例子来说明这个问题,当我将尺寸更新到200.0时,视图/窗口保持更大的尺寸,我希望它会缩小到更小的尺寸,那么我该如何解决这个问题呢?
struct ContentView: View {
@State private var sizeOfWindow: CGFloat = 400.0
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
Text("Hello, world!")
Button("update", action: {
if (sizeOfWindow == 200.0) { sizeOfWindow = 400.0 }
else { sizeOfWindow = 200.0 }
print(sizeOfWindow)
})
}
.frame(width: sizeOfWindow, height: sizeOfWindow)
.fixedSize()
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个符合 Decodable 的 CustomType,当我想将它用作我的函数所需的值时,Xcode 抱怨 CustomType 不符合 Decodable!我应该明确地使 CustomType 构造发生,我也这样做了,但它没有解决问题!我在这里缺少什么?
错误:
类型“CustomType.Type”不能符合“Decodable”
let stringOfJSON: String = """
{ "name": "SwiftPunk", "age": 35 }
"""
let dataOfJSON: Data? = stringOfJSON.data(using: String.Encoding.utf8)
Run Code Online (Sandbox Code Playgroud)
struct CustomType: Decodable {
enum Codingkeys: String, CodingKey {
case name, age
}
var name: String
var age: Int
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: Codingkeys.self)
name = try container.decode(String.self, forKey: .name)
age = try container.decode(Int.self, forKey: .age)
}
}
Run Code Online (Sandbox Code Playgroud)
func decoderFunction<T: Decodable>(dataOfJSON: Data?, customType: T, …Run Code Online (Sandbox Code Playgroud)