Swift嵌套结构--如何访问元素
在一个Swift应用程序中,我试图嵌套结构以获得更高的清晰度。代码如下:Swift嵌套结构--如何访问元素,swift,struct,nested,Swift,Struct,Nested,在一个Swift应用程序中,我试图嵌套结构以获得更高的清晰度。代码如下: struct ColorStruct { var colorname: String = "" struct RGB { var red: Int = 0 var green: Int = 0 var blue: Int = 0 } } 我可以访问ColorStruct元素(例如:“colorname”),只要它不是嵌套的 问:关于如何正确访问
struct ColorStruct {
var colorname: String = ""
struct RGB {
var red: Int = 0
var green: Int = 0
var blue: Int = 0
}
}
我可以访问ColorStruct
元素(例如:“colorname”),只要它不是嵌套的
问:关于如何正确访问“red”变量,我没有理解什么
var newColor = ColorStruct()
newColor.colorname = "Red"
newColor.RGB.red = 255 // Results in error:
// Static member 'RGB' cannot be used on instance of type `ColorStruct`
您可以通过以下方式实现:
struct ColorStruct {
var colorname:String = ""
var colorValue: RGB!
struct RGB {
var red: Int = 0
var green: Int = 0
var blue: Int = 0
mutating func setRed(value: Int) {
self.red = value
}
mutating func setGreen(value: Int) {
self.green = value
}
mutating func setBlue(value: Int) {
self.blue = value
}
}
}
然后将结构用作:
var color = ColorStruct()
color.colorname = "blue"
color.colorValue = ColorStruct.RGB.init(red: 0, green: 0, blue: 1)
print(color.colorValue)
如果要更改值,请调用以下命令:
color.colorValue.setRed(value: 2)
print(color.colorValue)
希望它有帮助问题代码中给出的嵌套结构不会自动创建该类型的外部结构成员。要实现这一点,请通过以下方式细化代码:
struct ColorStruct {
var colorname: String = ""
struct RGB {
var red: Int = 0
var green: Int = 0
var blue: Int = 0
}
var rgb = RGB()
}
var color = ColorStruct()
color.rgb.red = 255
您必须实例化您的
RGB
struct,而不是ColorStruct
:
struct ColorStruct {
var colorname:String = ""
struct RGB {
var red: Int = 0
var green: Int = 0
var blue: Int = 0
}
}
var newColor = ColorStruct.RGB()
newColor.red = 255
不能像这样给struct赋值。或者像这样创建RGB的新属性
struct ColorStruct {
var colorname:String = ""
var rgb = RGB()
struct RGB {
var red: Int = 0
var green: Int = 0
var blue: Int = 0
}
}
var newColor = ColorStruct()
newColor.colorname = "Red"
newColor.rgb.red = 255 // Results in error:
或者,在ColorStruct中设置静态变量
struct ColorStruct {
var colorname:String = ""
static var rgb = RGB()
struct RGB {
var red: Int = 0
var green: Int = 0
var blue: Int = 0
}
}
ColorStruct.rgb.red = 255
这一行:
struct RGB{ var red: Int = 0}
表示red是
结构RGB
中的实例变量(换句话说,red确实属于RGB的实例)。当您创建ColorStruct类型的结构时,您不会创建一个结构RGB。如果已创建实例变量的对象,则只能访问该实例变量。如果要访问variabele red,请创建一个结构RGB(RGB()
),或使variabele/struct(在Swift中可能吗?)静态(不要使其成为实例variabele)。struct RGB{var red:Int=0;var green:Int=0;var blue:Int=0;};struct ColorStruct{var colorname:String=”“;var RGB:RGB;}
而不是?正如你所展示的,我使用了单独的结构,但我的观点是,为了更清晰,我正在尝试嵌套结构。ColorStruct
不知道struct RGB
而不将var RGB:RGB
添加到ColorStruct
中。请注意,var RGB:RGB
不会编译,因为类型名称和变量之间存在名称冲突谢谢,但尽管它确实有效,但(可以说)并不能提高清晰度。我的目标有两个:提高代码的清晰度,并理解代码不起作用的原因。@VicW。如果要使用和修改结构中的任何值,需要创建结构的对象(按值传递)。@VicW。谢谢你,麦克斯。您的回答实现了我的两个目标:理解原因和代码的清晰性。Sebastien,谢谢。这种方法的问题是,当封闭的ColorStruct具有多个嵌套结构时,随着其他嵌套结构的添加,实例化变得越来越复杂。