如何从指定范围数组中取值?及TV类相关实现优化问题咨询
问题解答
1. 从指定范围中获取数字
在Swift中,针对指定范围(如0...100闭区间)获取数字,常见操作方式如下:
- 生成随机数:直接调用
Int.random(in:)方法从目标范围生成随机整数let randomNum = Int.random(in: 0...100) print(randomNum) - 转数组后获取元素:先将范围转换为数组,再通过下标、遍历等方式获取元素
let numberRange = 0...100 let numberArray = Array(numberRange) // 获取第一个元素 let firstNum = numberArray[0] // 获取最后一个元素 let lastNum = numberArray.last! // 遍历输出所有元素 for num in numberArray { print(num) }
2. 电视音量功能实现与tvName字段整合
实现音量功能并打印当前等级
现有代码中Setting的volume定义存在问题,直接赋值(0...100)会让它成为闭区间类型,而非具体的音量数值。以下是修正后的实现方案:
struct Setting { // 用属性观察者限制音量在0-100区间内 private(set) var volume: Int = 0 { willSet { volume = max(0, min(newValue, 100)) } } enum Display: String { case colorful = "Color" case blackwhite = "Black&White" } // 提供外部调整音量的方法 mutating func setVolume(to value: Int) { volume = max(0, min(value, 100)) } } class Tv { var tvName = (firm: "", model: 0) var isActive = false // 关联电视的设置实例 var settings = Setting() enum Channels: String { case news = "News" case serials = "Serials" case horror = "Horror" case comedy = "Comedy" case history = "History" case cartoons = "Cartoons" } func tvStatus() { if isActive { // 打印当前音量等级 print("The TV \(tvName.firm) \(tvName.model) is on and shows the channel \(Channels.serials.rawValue), display: \(Setting.Display.colorful.rawValue), volume: \(settings.volume)") } else { print("TV is off") } } } // 使用示例 let oldTv = Tv() oldTv.tvName.firm = "LG" oldTv.tvName.model = 6643 // 设置音量为50 oldTv.settings.setVolume(to: 50) oldTv.isActive = true oldTv.tvStatus()
整合电视品牌与型号到tvName字段
有两种简洁的实现方式:
- 添加计算属性:保留原有元组字段,新增计算属性返回整合后的名称
class Tv { var tvName = (firm: "", model: 0) // 计算属性自动拼接品牌与型号 var fullTvName: String { "\(tvName.firm) \(tvName.model)" } // 其他代码不变... }
调用时直接使用oldTv.fullTvName即可获取整合后的名称。
- 直接使用字符串属性+同步更新:将
tvName改为字符串类型,通过单独的品牌、型号属性同步更新它
class Tv { var tvName: String = "" private var firm: String = "" { didSet { updateTvName() } } private var model: Int = 0 { didSet { updateTvName() } } private func updateTvName() { tvName = "\(firm) \(model)" } // 对外暴露设置品牌和型号的方法 func setFirm(_ newFirm: String) { firm = newFirm } func setModel(_ newModel: Int) { model = newModel } // 其他代码不变... }
使用示例:
oldTv.setFirm("LG") oldTv.setModel(6643) print(oldTv.tvName) // 输出 "LG 6643"
内容的提问来源于stack exchange,提问作者Alluroso
相关产品推荐
相关产品推荐

