Ios Swift:正确初始化SIMD3并从struct调用它

Ios Swift:正确初始化SIMD3并从struct调用它,ios,swift,iphone,xcode,Ios,Swift,Iphone,Xcode,我正在尝试调用已定义的结构,以便在按下按钮时可以更改其值。我在结构内调用SIMD3时遇到问题。现在我有, struct CaptureData { var vertices: [SIMD3<Float>] var mode: Mode = .one mutating func nextCase() { mode = mode.next() } var verticesFormatted : String { let v =

我正在尝试调用已定义的结构,以便在按下按钮时可以更改其值。我在结构内调用SIMD3时遇到问题。现在我有,

struct CaptureData {
    var vertices: [SIMD3<Float>]

    var mode: Mode = .one
    mutating func nextCase() {
     mode = mode.next()
    }
    var verticesFormatted : String {

    let v = "<" + vertices.map{ "\($0.x):\($0.y):\($0.z)" }.joined(separator: "~") + "method: \(mode.next().rawValue)"
            return "\(v)"
        }
}
我正在尝试初始化var instance=CaptureDatavertices:[SIMD3],但出现错误:无法将类型为“[SIMD3]”的值转换为预期的参数类型“[SIMD3]”

@Jousha还建议我使用以下内容:

 typealias XYZVar = (x: Float, y: Float, z: Float) 

struct CaptureData { 
var vertices:[XYZVar] 
.... other variables 
} 
但是,我也尝试了使用var instance=CaptureDatavertices:[XYZVar]这样做,但它也不起作用:无法将类型“[XYZVar]”的值转换为类型“aka”Array.type“预期参数类型”[XYZVar]”aka“Array”

我的问题是,如何正确调用SIMD3并从var instance=CaptureDatavertices:[SIMD3]修复上述错误


非常感谢

嗯,我从哪里开始

您正在将[SIMD3]和[XYZVar]这两种类型传递给期望值作为参数的函数/初始值设定项。这就是编译器抱怨的原因

让我解释一下

在swift中,当您编写var顶点:[SIMD3]时,您的意思是:顶点是一个SIMD3数组。现在,如果要为顶点赋值,可以通过写入顶点=[]或顶点=[SIMD3]来实现,它们是等价的

我对你的代码做了一些修改。看一看:

进口单指令多数据 枚举模式:字符串,可大小写{ 案例一,案例二,案例三 } 扩展casiterable,其中Self:equalable{ var allCases:allCases{Self.allCases} var-nextCase:Self{ 让index=allCases.indexafter:allCases.firstIndexof:self! 保护索引!=allCases.endIndex else{返回allCases.first!} 返回所有案例[索引] } @可丢弃结果 func下一步->自我{ return self.nextCase } } 结构捕获数据{ 变量顶点:[SIMD3] 变量模式:模式=.1 突变func-nextCase{ mode=mode.next } var格式:字符串{ 设VerticesDescripted=顶点 .map{\$0.x:\$0.y:\$0.z} .接合分离器:~ 设v=<\VerticesDescripted方法:\mode.next.rawValue 返回v } } 让数据=CaptureDataVertex:[ SIMD3x:0,y:0,z:0, SIMD3x:0.5,y:1,z:0, SIMD3x:1,y:0,z:0 ] printdata.verticesFormatted //打印:<0.0:0.0:0.0~0.5:1.0:0.0~1.0:0.0:0.0方法:两个
谢谢你的回复!我成功地找到了方法二。如果我能问你一个后续问题?我定义了var数据,并在按钮中使用了data.nextCase。我想点击后,方法会相应地改变,一,二,然后三。然而,它始终只停留在方法二。。。
 typealias XYZVar = (x: Float, y: Float, z: Float) 

struct CaptureData { 
var vertices:[XYZVar] 
.... other variables 
}