使用 Swift 2.0 从文本文件创建的字符串中获取数组组件

Grab array components from string created from text file using Swift 2.0

我有一个格式如下(缩写如下)的文本文件:

Title";"SeriesID";"ChannelName
Title1";"00000001";"Channel1
Title2";"00000002";"Channel2
Title3";"00000003";"Channel3
...
Title99999999";"99999999";"Channel99999999

我已将此文本文件作为资源加载到 Xcode 7 中,并按如下方式解析它:

class TVSeriesTableViewController: UITableViewController {

    var seriesDict = [String:String]()
    var seriesArray = NSMutableArray()

    override func viewDidLoad() {
        super.viewDidLoad()

        let path = NSBundle.mainBundle().pathForResource("series", ofType: "txt")

        let filemgr = NSFileManager.defaultManager()
        if filemgr.fileExistsAtPath(path!) {

            do {

                let fullText = try String(contentsOfFile: path!, encoding: NSUTF8StringEncoding)

                let readings = fullText.componentsSeparatedByString("\n") as [String]

                for i in 1..<readings.count {

                    let seriesData = readings[i].componentsSeparatedByString("\";\"")

                    seriesDict["Title"] = "\(seriesData[0])"
                    seriesDict["SeriesID"] = "\(seriesData[1])"
                    seriesDict["ChannelName"] = "\(seriesData[2])"

                    seriesArray.addObject(seriesDict)

                }

                for element in seriesArray {

                    print(element)

                }

            } catch let error as NSError {

                print("Error: \(error)")

            }

        }

        self.title = "TV Series"

    }
}

出于某种原因,上面的脚本抛出了一个索引超出范围的错误,但是如果我切换

seriesDict["Title"] = "\(seriesData[0])"
seriesDict["SeriesID"] = "\(seriesData[1])"
seriesDict["ChannelName"] = "\(seriesData[2])"

seriesDict["Title"] = "\(seriesData[0])"
seriesDict["SeriesID"] = "\(seriesData[0])"
seriesDict["ChannelName"] = "\(seriesData[0])"

没有错误。我一直在试图弄清楚为什么我似乎无法访问 seriesData 的第二个和第三个组件。经过一些调试,我注意到 seriesData 的结构如下:

["Title1", "00000001", "Channel1"]
["Title2", "00000002", "Channel2"]
["Title3", "00000003", "Channel3"]
[...]
["Title99999999", "99999999", "Channel99999999"]

我是 Xcode/Swift 的新手,因此非常感谢任何帮助(以及对上述失败原因的解释。谢谢!

我猜你的问题是 Xcode 没有将 "series.txt" 文件添加到项目的复制包资源中。为此,请单击界面左侧面板导航视图中的蓝色项目图标。 (它应该在顶部)。

(以蓝色突出显示的图标)。 单击它之后,转到构建阶段(带有蓝色字体的选项卡)

然后在视图底部单击复制捆绑资源,然后按加号并添加您的series.txt文件

这样做会将 series.txt 文件添加到主包中,从而可以通过 NSBundle.mainBundle().pathForResource("series", ofType: "txt")

访问它

希望对您有所帮助! :D

由于文件的最后一行是空行,所以出现了错误。试图弄清楚如何不读它,但这是一个单独的问题,我想我能弄清楚。