学习了所有新的 SwiftUI 2.0 更改,但发现.navigationTitle它的工作方式几乎与.navigationBarTitle. 我查看了 WWDC 2020 视频,发现了一个视频,其中提到它用于区分 MacOS 中的选项卡标题?但不确定我现在是否应该使用它而不是.navigationBarTitle在 iOS 中使用它?此外,Apple 文档也不清楚两者之间的区别。
所以我的问题是,确切的区别是什么,你将如何在 iOS/MacOS 中使用它们?
我正在尝试对 ForEach 循环中任何点击的文本项应用删除线:
struct BrandListView: View {
@ObservedObject var list: ListObject
var body: some View {
ScrollView {
VStack {
ForEach(list.items) { items in
Text(item.name)
.strikethrough(//?)
.onTapGesture(perform: {
// on tap, apply strikethrough only to this item.
})
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以使用 @State var 应用条件,以跟踪何时应用删除线()或不应用?我认为唯一的方法是将一个属性放入 listObject 中,以跟踪它是否被删除,然后使用该属性将 true/false 应用于 Strikethrough() 修饰符。但这看起来像意大利面条代码吗?
我不完全理解\.self以下代码的具体作用:
struct ContentView: View {
@State private var numbers = [Int]()
@State private var currentNumber = 1
var body: some View {
VStack {
List {
ForEach(numbers, id: \.self) {
Text("\($0)")
}
}
Button("Add Number") {
self.numbers.append(self.currentNumber)
self.currentNumber += 1
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在关注:https://www.hackingwithswift.com/books/ios-swiftui/deleting-items-using-ondelete。
我现在对这门语言有一个非常基本的了解,所以我可能无法理解高级解释,所以更喜欢非常简单的解释或带有详细描述的类比。id我认为它将每个项目设置list为数字数组中的每个项目?如果错误请纠正我 - 但是每个都id被设置为Int数字数组的每个条目中的内容吗?如果是这样,那么\打字时实际会做什么\.self以及.self与 结合实际会做什么\?
所以我知道以下代码有效:
struct ContentView: View {
func removeRows(at offsets: IndexSet) {
numbers.remove(atOffsets: offsets)
}
@State private var numbers = [Int]()
@State private var currentNumber = 1
var body: some View {
VStack {
List {
ForEach(numbers, id: \.self) {
Text("\($0)")
}
.onDelete(perform: removeRows)
}
Button("Add Number") {
self.numbers.append(self.currentNumber)
self.currentNumber += 1
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白的是removeRows(at offsets: IndexSet)自定义函数处理程序是如何.onDelete()工作的。at具体来说,为什么前面有一个参数标签offsets:。您可以使用on代替at例如吗?参数标签只是为了让我们更好地理解代码吗?
然后,IndexSet我认为我将其理解为一种类型,它保存用于索引目的的 Int 或用于删除列表中的行的 Int 范围,以便 swiftui 知道要删除哪一行?
我想我理解numbers.remove(atOffsets: …
有一个更好的方法吗?有没有办法访问环境中的UserDefaults??我做了以下事情:
struct ContentView: View {
@AppStorage("darkMode") var darkMode = false
var body: some View {
SubView(darkMode: $darkMode)
}
}
}
struct SubView: View {
@Binding var darkMode: Bool
var body: some View {
Text("Dark Mode is \(darkMode == true ? "on" : "off")")
}
}
Run Code Online (Sandbox Code Playgroud)