【发布时间】:2023-02-21 07:53:13
【问题描述】:
import SwiftUI
import Foundation
func readLocalFile(forName name: String) -> Data? {
do {
if let bundlePath = Bundle.main.path(forResource: name,
ofType: "json"),
let jsonData = try String(contentsOfFile: bundlePath).data(using: .utf8) {
return jsonData
}
} catch {
print(error)
}
return nil
}
func serialization(data: Data) -> [String: String]? {
let json = try! JSONSerialization.jsonObject(with: data, options: []) as? [String: String]
return json
}
struct MainView: View {
@State var takeInput: String = ""
@State var textFieldArray: [String.SubSequence] = []
@State var finalValues: [String] = []
@State var showSheet: Bool = false
var body: some View {
let localData = readLocalFile(forName: "json_data")
let dictionarydude = serialization(data: localData!)!
let keys = dictionarydude.map{$0.key}
VStack{
TextField("Type details from your dream here", text: $takeInput)
HStack{
Button(action:{
saveText()
iterateText(keyParam: keys)
showSheet.toggle()
}, label: {
Text("Submit".uppercased())
.font(.headline)
.foregroundColor(.white)
.padding()
.background(Color.blue)
.cornerRadius(10)
})
Button(action:{
takeInput = ""
textFieldArray = []
finalValues = []
}, label: {
Text("Reset".uppercased())
.font(.headline)
.foregroundColor(.white)
.padding()
.background(Color.gray)
.cornerRadius(10)
})
}
}
.sheet(isPresented: $showSheet, content: {
NextScreen(finalValues: finalValues, dictionarydude: dictionarydude)
})
}
func iterateText(keyParam: [String]) {
for i in textFieldArray{
for dictkey in keyParam{
if i.lowercased() == dictkey.lowercased(){
finalValues.append(dictkey)
}
}
}
}
func saveText(){
textFieldArray = Array(Set(takeInput.split(separator: " ")))
takeInput = ""
}
}
struct NextScreen: View {
let finalValues: [String]
let dictionarydude: [String: String]
var body: some View{
if finalValues.count > 0{
NavigationView{
ScrollView{
VStack(alignment: .center, spacing: 20){
ForEach(finalValues, id: \.self) { index in
DisclosureGroup(content:{
Text(dictionarydude[index]!)
.fontWeight(.bold)
.multilineTextAlignment(.leading)
},label:{
Text(index)
.font(.largeTitle)
})
.padding()
}
}
.navigationTitle("Meanings")
}
}
}else{
Text("Oops...")
.font(.largeTitle)
.fontWeight(.bold)
.padding(10)
Text("Your dream didn't contain any words with significant meanings")
.italic()
.fontWeight(.light)
}
}
}
import SwiftUI
import Foundation
func readLocalFile(forName name: String) -> Data? {
do {
if let bundlePath = Bundle.main.path(forResource: name,
ofType: "json"),
let jsonData = try String(contentsOfFile: bundlePath).data(using: .utf8) {
return jsonData
}
} catch {
print(error)
}
return nil
}
func serialization(data: Data) -> [String: String]? {
let json = try! JSONSerialization.jsonObject(with: data, options: []) as? [String: String]
return json
}
struct MainView: View {
@State var takeInput: String = ""
@State var textFieldArray: [String.SubSequence] = []
@State var finalValues: [String] = []
@State var showSheet: Bool = false
var body: some View {
let localData = readLocalFile(forName: "json_data")
let dictionarydude = serialization(data: localData!)!
let keys = dictionarydude.map{$0.key}
VStack{
TextEditor(text: $takeInput)
HStack{
Button(action:{
saveText()
iterateText(keyParam: keys)
showSheet.toggle()
}, label: {
Text("Submit".uppercased())
.font(.headline)
.foregroundColor(.white)
.padding()
.background(Color.blue)
.cornerRadius(10)
})
Button(action:{
takeInput = ""
textFieldArray = []
finalValues = []
}, label: {
Text("Reset".uppercased())
.font(.headline)
.foregroundColor(.white)
.padding()
.background(Color.gray)
.cornerRadius(10)
})
}
}
.sheet(isPresented: $showSheet, content: {
NextScreen(finalValues: finalValues, dictionarydude: dictionarydude)
})
}
func iterateText(keyParam: [String]) {
for i in textFieldArray{
for dictkey in keyParam{
if i.lowercased() == dictkey.lowercased(){
finalValues.append(dictkey)
}
}
}
}
func saveText(){
textFieldArray = Array(Set(takeInput.split(separator: " ")))
takeInput = ""
}
}
struct NextScreen: View {
let finalValues: [String]
let dictionarydude: [String: String]
var body: some View{
if finalValues.count > 0{
NavigationView{
ScrollView{
VStack(alignment: .center, spacing: 20){
ForEach(finalValues, id: \.self) { index in
DisclosureGroup(content:{
Text(dictionarydude[index]!)
.fontWeight(.bold)
.multilineTextAlignment(.leading)
},label:{
Text(index)
.font(.largeTitle)
})
.padding()
}
}
.navigationTitle("Meanings")
}
}
}else{
Text("Oops...")
.font(.largeTitle)
.fontWeight(.bold)
.padding(10)
Text("Your dream didn't contain any words with significant meanings")
.italic()
.fontWeight(.light)
}
}
}
大家好。对不起,我知道这是很多代码,但我真的没有办法让它更小。这两部分中唯一不同的是包含 TextField 和 TextEditor 的行。问题是 TextField 版本有效并在 picture 中给出结果,如果我只输入单词测试,而 TextEditor 将一个空数组传递到 NextScreen 工作表中,因此触发工作表内部的其他内容,如图所示@ 987654322@。如果我向下滑动工作表并将新文本提交到 TextEditor 中而不停止并再次运行代码,它会工作并且数组中的旧输入也会显示出来。在这种情况下,我宁愿有一个 TextEditor,因为我需要多行,而不仅仅是一行,这就是我一直试图改变它的原因。老实说,我不知道为什么这不起作用,我已经遍历了每个变量并打印了它们,唯一一次任何东西都显示为空数组并且与我使用 TextField 时不同的是它被传递到工作表时.我想我只需要知道是否有人知道 TextField 和 TextEditor 之间可能导致这种情况的任何差异,因为我花了几个小时试图找到表明它们行为不同但我找不到任何东西的东西。
【问题讨论】: