在Swift中将实例变量别名替换为其他实例变量的更简单方法?
给定
Swift中的以下结构,是否有更简洁的方法将实例变量x,y和z别名为三元组的属性_v?
注意:我意识到,当然,我可以将这些实例变量声明为双精度而不需要元组.但是,我这样做的原因是我可以用单行语句设置三个变量,就像你将在init方法和下面的示例代码中看到的那样. 所需输出为“1.0”“4.0”的示例代码: var myVector = Vector3([1.0,2.0,3.0]) let x = myVector.x print(x) myVector.v = (4.0,5.0,6.0) print(x) 班级: struct Vector3 { typealias V3 = (x:Double,y:Double,z:Double) var v:V3 = (x:0.0,y:0.0,z:0.0) var x:Double { get { return v.x } set(x) { v.x = x } } var y:Double { get { return v.y } set(y) { v.y = y } } var z:Double { get { return v.z } set(z) { v.z = z } } init(_ args:AnyObject...) { if(args[0].isKindOfClass(NSArray)) { v = (args[0][0].doubleValue,args[0][1].doubleValue,args[0][2].doubleValue) } else if(args.count == 3){ v = (args[0].doubleValue,args[1].doubleValue,args[2].doubleValue) } } } 我希望能做的是: struct Vector3 { typealias V3 = (x:Double,z:0.0) alias x = v.x alias y = v.y alias z = v.z init(_ args:AnyObject...) { if(args[0].isKindOfClass(NSArray)) { v = (args[0][0].doubleValue,args[2].doubleValue) } } } 当然这不起作用.但还有另一种方法来实现同样的目标吗? 解决方法
只是做相反的事情!
如果这是原因,那就恰恰相反 struct Vector3 { var x: Double var y: Double var z: Double var coordinates: (Double,Double,Double) { set { (x,y,z) = newValue } get { return (x,z) } } } 用法 var vector = Vector3(x: 1,y: 2,z: 3) vector.x = 4 vector.coordinates // (4,2,3) 最后的说明 您的初始化程序可以通过多种方式进行改进. >停止使用NSArray,您使用的是Swift而不是Objective-C 现在我的问题 成员结构初始化器有什么问题? 当您没有为结构体显式定义初始化程序时,它会自动生成,就像我之前的代码剪切一样. 你确定你想要定义一个初始化器,它真的接受任何类型的对象,会崩溃99.99%的值可以传递给它的值组合吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |