Swift - 阅读文本:line1 = variable,line2 = variable,ect

时间:2018-06-03 20:20:52

标签: swift

我正在创建一个已保存帐户的程序。我正在逐行写入文件与用户信息(第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读取的内容分配给用户名变量等

2 个答案:

答案 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个并填充说一个结构对象