Xcode6无法调用'下标'使用类型的参数列表

时间:2014-10-16 21:18:08

标签: swift invoke

无法理解为什么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 ......这是重复的,所以请删除,没有问题,错误......

2 个答案:

答案 0 :(得分:2)

与Matt Gibson所说的相同,Double(value: String)不存在。截至目前,没有内置的方法可以从String转换为DoubleStringNSStringDouble是标准的解决方法。

我的版本看起来像这样:

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方法。