我正在创建一个已保存帐户的程序。我正在逐行写入文件与用户信息(第1行=用户名,第2行=密码,第3行=显示名称)。我很擅长阅读文本文件,但如何将每一行解码为另一个变量?所以line1 = usernameVariable,line2 = passwordVariable,line3 = displaynameVariable。
以下是我如何阅读数据
if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
let fileURL = dir.appendingPathComponent(file)
//reading
do {
let text2 = try String(contentsOf: fileURL, encoding: .utf8)
outText = text2
} catch {/* error handling here */}
}
这就是print(outText)得到的:
N1
U1
P1
X
N2
U2
p2
n =昵称,u =用户名,p =密码。
我只想将u1读取的内容分配给用户名变量等
答案 0 :(得分:2)
使用文本文件不是您应该为此做的。存储和检索数据有许多更合适的方法。最佳选项列表中的文本文件非常低。
首先,声明struct
以保留每个条目:
struct UserData {
let username: String
let password: String
let displayName: String
}
由于您希望保留此数据,请生成结构Codable
:
struct UserData: Codable {
现在,您可以使用JSONEncoder
将用户数据列表编码为Data
,然后将数据写入文件。并使用JSONDecoder
回读用户数据列表。
// You array of users
let users = [ UserData(username: "Bob", password: "pass", displayName: "Hello") ]
// Get the path
let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let url = dir.appendingPathComponent("userdata")
// Code to save the array of data
do {
let data = try JSONEncoder().encode(users)
try data.write(to: url)
} catch {
print("error: \(error)")
}
// Code to read the list of user data
do {
let data = try Data(contentsOf: url)
let newUsers = try JSONDecoder().decode([UserData].self, from: data)
print(newUsers)
} catch {
print("error: \(error)")
}
现在您不需要自己进行任何字符串解析。这恰好使用JSON来保存数据,但这个细节并不重要。
答案 1 :(得分:0)
你可以尝试
let all = str.components(separatedBy:"\n")
然后循环每3个并填充说一个结构对象