Swift中如何让Colour结构体实例直接返回RGB数组?
解决Swift结构体实例直接返回RGB数组的问题
嘿,针对你的问题,结合你补充的信息,我整理了两个实用的方案,都能满足你的需求:
方案1:通过自定义描述返回数组格式字符串(已采纳的协议方案)
这个方案让Colour结构体遵守CustomStringConvertible协议,重写description属性,这样在Playground中直接查看实例时,会自动显示成数组样式的字符串,同时保留原有的.red/.green/.blue访问能力:
struct Colour: CustomStringConvertible { var red: Int var green: Int var blue: Int init(red: Int, green: Int, blue: Int) { self.red = red self.green = green self.blue = blue } // 自定义实例的描述文本 var description: String { "[\(red), \(green), \(blue)]" } } // 测试效果 let red = Colour(red: 255, green: 0, blue: 0) red // 直接显示: [255, 0, 0] red.red // 255,依然可以正常访问单个颜色分量
方案2:使用type alias让Colour本质就是数组(你补充的可行方案)
这个方案更直接,通过typealias把Colour定义为[Int]的别名,再通过扩展添加颜色分量的读写属性,既让实例本身就是数组,又保留了原有的访问方式:
// 将Colour定义为Int数组的别名 typealias Colour = [Int] // 扩展Colour,添加颜色分量的计算属性和初始化方法 extension Colour { var red: Int { get { self[0] } set { self[0] = newValue } } var green: Int { get { self[1] } set { self[1] = newValue } } var blue: Int { get { self[2] } set { self[2] = newValue } } // 保留和原结构体一致的初始化方法 init(red: Int, green: Int, blue: Int) { self = [red, green, blue] } } // 测试效果 let red = Colour(red: 255, green: 0, blue: 0) red // 直接显示: [255, 0, 0](本身就是数组) red.red // 255,正常访问分量 var skyBlue = Colour(red: 135, green: 206, blue: 235) skyBlue.blue = 200 skyBlue // [135, 206, 200],修改分量后数组也同步更新
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

