无法理解为什么xcode会尝试调用下标,我不希望它来自xcode。
我的结构很简单:
struct Point3D
{
var x: Double = 0.0
var y: Double = 0.0
var z: Double = 0.0
init(x:Double, y:Double, z:Double) {self.x = x; self.y = y; self.z = z}
}
然而,代码不起作用,它说:Cannot invoke 'subscript' with an argument list of type '(x: Double, y: Double, z: Double)'
。但正如你所看到的,我有一个带有这些类型的init ......
private func convertFileStringToPoint3D(str:String)->Point3D
{
let components_file_string_point3d = str.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: " \t"))
if components_file_string_point3d.count>2 {
return Point3D(x: Double(components_file_string_point3d[0]), y: Double(components_file_string_point3d[1]), z: Double(components_file_string_point3d[2]))
} else {
assertionFailure("Wrong File Structure. Cannot convert string to Point3D.")
}
}
当我尝试使用NSString的doublevalue时,它说它没有一个名为doublevalue的成员...
我很尴尬:(我只是错过了一个字符doublevalue而不是doubleValue ......这是重复的,所以请删除,没有问题,错误......
答案 0 :(得分:2)
与Matt Gibson所说的相同,Double(value: String)
不存在。截至目前,没有内置的方法可以从String
转换为Double
。 String
到NSString
到Double
是标准的解决方法。
我的版本看起来像这样:
private func convertFileStringToPoint3D(str:String)->Point3D
{
let components_file_string_point3d = str.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: " \t"))
if components_file_string_point3d.count>2 {
return Point3D(
x: Double((components_file_string_point3d[0] as NSString).doubleValue),
y: Double((components_file_string_point3d[1] as NSString).doubleValue),
z: Double((components_file_string_point3d[2] as NSString).doubleValue)
)
} else {
assertionFailure("Wrong File Structure. Cannot convert string to Point3D.")
}
}
我猜你的代码是如何工作的。
答案 1 :(得分:0)
Swift的Double没有来自String的初始化器。我会使用NSString的doubleValue:
let components_file_string_point3d:[NSString] = str.componentsSeparatedByCharactersInSet(NSCharacterSet(charactersInString: " \t"))
if components_file_string_point3d.count>2 {
return Point3D(x: components_file_string_point3d[0].doubleValue, y: components_file_string_point3d[1].doubleValue, z: components_file_string_point3d[2].doubleValue)
请注意,我明确指定components_file_string_point3d的类型,以便它是NSString的数组,而不是Swift String;这使您可以在以后轻松访问NSString的doubleValue方法。