答案 0 :(得分:2)
这种行为是正常的,来自componentsSeparatedByString
类的NSString
文档:
<强>讨论强>
数组中的子串按接收器中的顺序显示。相邻的分隔符字符串出现在结果中产生空字符串。 同样,如果字符串以分隔符开头或结尾,则第一个或最后一个子字符串分别为空。例如,此代码片段:
NSString *list = @"Karin, Carrie, David"; NSArray *listItems = [list componentsSeparatedByString:@", "];
。
产生一个阵列{@“Karin”,@“Carrie”,@“David”“}。如果
list
以逗号和空格开头,例如@“,Norman,Stanley,Fletcher” - 数组包含以下内容:{@“”,@“Norman”,@“ Stanley“,@”Fletcher“}如果
list
没有分隔符 - 例如,“Karin” - 数组包含字符串本身,在本例中为{@“Karin”}。
您的文本文件以分隔符开头,因此空字符串是数组的第一项。
编辑:
解决方案就是删除第一项:
class ViewController: UITableViewController {
var tableData = [String]()
override func viewDidLoad() {
super.viewDidLoad()
if let path = NSBundle.mainBundle().pathForResource("textFile", ofType: "txt"),
data = String(contentsOfFile:path, encoding: NSUTF8StringEncoding, error: nil) {
tableData = data.componentsSeparatedByString("#")
tableData.removeAtIndex(0)
}
}
}
...
答案 1 :(得分:0)
更新 在这里,我只更改了一行,其他与您的代码相同 我注意到你的源文件可能在最顶部包含空行,这导致第一个单元格为空!
// tab.swift
// TestGround
//
// Created by dip on 9/3/15.
// Copyright (c) 2015 apple. All rights reserved.
//
import UIKit
class tab: UITableViewController {
var path: String?
var data: String?
var TableView1:[String] = [] //Changed this line
var TableView2 = [String]()
override func viewDidLoad() {
super.viewDidLoad()
self.path = NSBundle.mainBundle().pathForResource("dip", ofType: "txt")
self.data = String(contentsOfFile:path!, encoding: NSUTF8StringEncoding, error: nil)
if var content = (data){
//var line: [String] = content.componentsSeparatedByString("\n")
var chp: [String] = content.componentsSeparatedByString("\n")
TableView1 += chp
TableView1 += chp
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
println("count is \(self.TableView1.count)")
return TableView1.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var Cell = self.tableView.dequeueReusableCellWithIdentifier("cel", forIndexPath: indexPath) as! TableViewCell //little change but will not effect
var text = TableView1[indexPath.row] as String //just created a variable of string
println(text)
Cell.textLabel?.text = text // added text to label
return Cell
}
}