在我的 Swift OS X Xcode 项目中,我无法将 String 转换为 Int。我有一些数据以逗号分隔格式保存在文本文件中。文本文件的内容如下:
1、赛斯纳172、3、54.4、124、38.6112
(最后换行)
我阅读了文本文件并将其分开,首先是\n
自己获取每一行,然后是,
自己获取每个元素。执行此操作的代码如下:
if let dir : NSString = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true).first {
let path = dir.stringByAppendingPathComponent("FSPassengers/aircraft.txt")
do {
let content = try NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding)
if content != "" {
let astrContent:[String] = content.componentsSeparatedByString("\n")
for aeroplane in astrContent {
let aSeperated:[String] = aeroplane.componentsSeparatedByString(",")
print(aSeperated[0])
print(Int(aSeperated[0]))
//self.aAircraft.append(Aircraft(id: aSeperated[0], type: aSeperated[1], passengerCapacity: Int(aSeperated[2])!, cargoCapacityKg: Double(aSeperated[3])!, cruiseSpeed: Int(aSeperated[4])!, fuelLitresPerHour: Double(aSeperated[5])!))
}
}
}
catch {
print("Error")
}
}
这里的最终结果是将每条记录(文本文件的每一行)分配到数组aAircraft
中。该数组由一个名为 的自定义对象组成Aircraft
。自定义类如下:
class Aircraft: NSObject {
var id:Int = Int()
var type:String = String()
var passengerCapacity:Int = Int()
var cargoCapacityKg:Double = Double()
var cruiseSpeed:Int = Int()
var fuelLitresPerHour:Double = Double()
override init() {}
init(id:Int, type:String, passengerCapacity:Int, cargoCapacityKg:Double, cruiseSpeed:Int, fuelLitresPerHour:Double) {
self.id = id
self.type = type
self.passengerCapacity = passengerCapacity
self.cargoCapacityKg = cargoCapacityKg
self.cruiseSpeed = cruiseSpeed
self.fuelLitresPerHour = fuelLitresPerHour
}
}
在上面的第一个代码提取中,我将文本文件内容拆分并尝试将它们分配到数组中,您会看到我已经注释掉了该append
行。我这样做是为了编译应用程序,目前它正在向我抛出错误。
该错误围绕根据需要将 String 值转换为 Int 和 Double 值。例如Aircraft.id
, 或aSeperated[0]
需要是一个 Int。您可以看到我使用该行将Int(aSeperated[0])
String 转换为 Int 以便将其分配给自定义对象。但是,这行代码失败了。
第一个代码提取中的两个打印语句输出以下值:
1
可选(1)
如果我!
在第二个打印语句的末尾添加 a 来制作它们:
print(aSeperated[0])
print(Int(aSeperated[0])!)
我得到以下输出:
我理解错误的含义,它试图解开一个可选值,因为我强制解开它,并且它在我传递给它的字符串中找不到 Int 值,但我不明白为什么我会收到错误. 字符串值为1
,很明显是一个整数。我究竟做错了什么?