在Swift中将实例变量别名替换为其他实例变量的更简单方法?

在Swift中将实例变量别名替换为其他实例变量的更简单方法?,第1张

概述给定 Swift中的以下结构,是否有更简洁的方法将实例变量x,y和z别名为三元组的属性_v? 注意:我意识到,当然,我可以将这些实例变量声明为双精度而不需要元组.但是,我这样做的原因是我可以用单行语句设置三个变量,就像你将在init方法和下面的示例代码中看到的那样. 所需输出为“1.0”“4.0”的示例代码: var myVector = Vector3([1.0,2.0,3.0])let x 给定 Swift中的以下结构,是否有更简洁的方法将实例变量x,y和z别名为三元组的属性_v?

注意:我意识到,当然,我可以将这些实例变量声明为双精度而不需要元组.但是,我这样做的原因是我可以用单行语句设置三个变量,就像你将在init方法和下面的示例代码中看到的那样.

所需输出为“1.0”“4.0”的示例代码:

var myVector = Vector3([1.0,2.0,3.0])let x = myVector.xprint(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)        }    }}

当然这不起作用.但还有另一种方法来实现同样的目标吗?

解决方法 只是做相反的事情!

I realize that,of course,I Could just declare these instance variables as Doubles and not need the tuple. However,the reason I’m doing it this way is so I can set three variables with a single-line statement like you will see in the init method and the below sample code.

如果这是原因,那就恰恰相反

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 = 4vector.coordinates // (4,2,3)

最后的说明

您的初始化程序可以通过多种方式进行改进.

>停止使用NSArray,您使用的是Swift而不是Objective-C
>停止使用isKindOfClass,用作?执行条件转换
>您相信第一个数组中的对象将具有doubleValue属性.所以我可以很容易地崩溃你的init通过不同的东西吧?

现在我的问题

成员结构初始化器有什么问题?

当您没有为结构体显式定义初始化程序时,它会自动生成,就像我之前的代码剪切一样.

你确定你想要定义一个初始化器,它真的接受任何类型的对象,会崩溃99.99%的值可以传递给它的值组合吗?

总结

以上是内存溢出为你收集整理的在Swift中将实例变量别名替换为其他实例变量的更简单方法?全部内容,希望文章能够帮你解决在Swift中将实例变量别名替换为其他实例变量的更简单方法?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1003920.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存