【问题标题】:How to parse certain data into an array in Swift?如何在 Swift 中将某些数据解析为数组?
【发布时间】:2016-04-19 04:39:36
【问题描述】:

我正在阅读 iOS/Swift 中的 .txt 文件。我从文本文件中获取所有信息。问题是我只想获取用户名并将它们存储在一个数组中。现在,我认为它将 .txt 文件中的所有数据存储在一个字符串中。我怎样才能正确解析这个,所以我只有一个数组中的用户名?

这是我现在的代码

    if let filepath = NSBundle.mainBundle().pathForResource("myfile", ofType: "txt") {
        do {
            let contents = try NSString(contentsOfFile: filepath, usedEncoding: nil) as String
            print(contents)
        } catch {
            // contents could not be loaded
        }
    } else {
        print("UNABLE TO FIND TEXT FILE");
    }

我的文本文件格式:

用户名姓氏

asf 约翰·史密斯

凯莉安德伍德

【问题讨论】:

  • 如果这是您希望随应用提供的固定文件,如果您将所有数据放入 plist 文件中会更容易。然后就可以直接将plist文件加载到数组中了。
  • 文本文件是什么样的?
  • 除非您告诉我们您的文本格式,否则我们无法为您提供帮助。 rmaddy 使用 plist 的建议很好。这样您就可以将文件直接读入原生 iOS 数据结构,如数组、字典、字符串、整数等。
  • 我会用文本文件格式更新 OP,对此感到抱歉
  • 好的,用文本文件格式检查我更新的帖子。

标签: ios swift


【解决方案1】:

这是一个使用高阶函数的解决方案。希望这对你有用。

let text = "tj thomas jeffereson \nbf benjamin franklin\ngw george washington"


let usernames = text.characters
    .split { $0 == "\n" }
    .map { String($0) }
    .map { String($0.characters.split(" ")[0]) }

print(usernames)

输出:

["tj", "bf", "gw"]

遍历结果:

for user in usernames {
   print(user)
}

【讨论】:

  • 这正是我所需要的。谢谢
  • 如何循环遍历该数组(用户名)。类似 for(int i =0; i
  • 你不想做那种循环。
【解决方案2】:

编辑:使用 .plist 文件添加解决方案

一种方法,您可以将信息存储到 .plist 文件中。

  1. 按 command+N 以添加一个名为 UserInformation.plist 的新 .plist 文件(您可以将 UserInformation 替换为您喜欢的任何名称。)并编辑如下

  1. 然后你可以将用户名存储到一个数组中。

    if let path = NSBundle.mainBundle().pathForResource("UserInformation", ofType: "plist") {
        if let data = NSArray(contentsOfFile: path) {
            let userName = NSMutableArray.init(capacity: 1)
            for dict in data {
                userName.addObject(dict.valueForKey("User")!)
            }
            // Now user names are stored into a array
        }
    }
    

另一种方式,您也可以将信息存储到本地 .json 文件中,尽管 JSON 通常用于客户端和服务器之间的通信。

从 iOS5 开始,Apple 提供了 API 来支持解析 JSON。

  1. 使用您喜欢的任何文本编辑器创建一个包含以下内容的 json 文件并将其保存为名称 UserInfo.json(您可以将 UserInfo 替换为您喜欢的任何名称。)

    [
        { "User":"asf", "FirstName":"john", "LastName":"smith"},
        { "User":"adfkh", "FirstName":"carrie", "LastName":"underwood"}
    ]
    
  2. 将其添加到您的项目中。

  3. 现在您可以将用户名存储到数组中。

    if let path = NSBundle.mainBundle().pathForResource("UserInfo", ofType: "json") {
        if let data = NSData(contentsOfFile: path) {
            do {
                let jsonData = try NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers ) as! NSMutableArray
                let userName = NSMutableArray.init(capacity: 1);
                for  dict in jsonData {
                    userName.addObject(dict.valueForKey("User")!)
                }
                // Now user names are stored into a array
            } catch {
                // report error
            } 
        }
    }
    

关于JSON的更多详细信息,您可以访问www.json.org

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 2018-05-09
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多