gpt4 book ai didi

string - Swift OS X 字符串到 Int 转换错误

转载 作者:行者123 更新时间:2023-11-30 13:34:42 25 4
gpt4 key购买 nike

我在 Swift OS X Xcode 项目中将 String 转换为 Int 时遇到问题。我有一些数据以逗号分隔格式保存在文本文件中。文本文件的内容如下:

1,Cessna 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.idaSeperated[0] 需要是 Int。您可以看到我使用 Int(aSeperated[0]) 行将 String 转换为 Int,以便将其分配给自定义对象。但是,这行代码失败了。

第一个代码摘录中的两个打印语句输出以下值:

1
Optional(1)

如果我在第二个打印语句的末尾添加 ! 来使它们:

print(aSeperated[0])
print(Int(aSeperated[0])!)

我得到以下输出:

Error Screenshot

我理解错误的含义,它试图解开一个可选值,因为我强制解开它,并且它在我传递给它的字符串中找不到 Int 值,但我不明白为什么我这样做得到错误。字符串值为1,很明显这是一个整数。我做错了什么?

最佳答案

因为 Casena 172 无法转换为 Int。您还有其他十进制数,将它们转换为 Int 时会失去精度。使用 NSScanner 从 CSV 字符串创建初始值设定项:

init(csvString: String) {
let scanner = NSScanner(string: csvString)
var type: NSString?

scanner.scanInteger(&self.id)
scanner.scanLocation += 1
scanner.scanUpToString(",", intoString: &type)
self.type = type as! String
scanner.scanLocation += 1
scanner.scanInteger(&self.passengerCapacity)
scanner.scanLocation += 1
scanner.scanDouble(&self.cargoCapacityKg)
scanner.scanLocation += 1
scanner.scanInteger(&self.cruiseSpeed)
scanner.scanLocation += 1
scanner.scanDouble(&self.fuelLitresPerHour)
}

用法:

let aircraft = Aircraft(csvString: "1,Cessna 172,3,54.4,124,38.6112")

关于string - Swift OS X 字符串到 Int 转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36213770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com