从CGColor数组取值设置UIView的backgroundColor报类型歧义编译错误
问题原因
- 类型不匹配:
UIView.backgroundColor属性的接收类型为UIColor,你定义的App.sector_colors_array存储的是CGColor类型,直接跨类型赋值时编译器无法识别有效类型,就会抛出“Type of expression is ambiguous without more context”错误。 - 数组初始化逻辑存在越界风险:你初始化
map_sectors_UIView时直接对空数组用下标赋值,空数组没有对应下标的预留空间,运行时会触发越界崩溃。
修复方案
- 修复颜色类型不兼容问题,可选两种方案:
- 方案一:赋值时做类型转换,把报错行替换为以下代码:
ViewController.map_sectors_UIView[sector_index].backgroundColor = UIColor(cgColor: sector_colors_array[sector_index])- 方案二(更推荐):直接把颜色数组的存储类型改为
UIColor,省去每次转换的开销:
// App类内修改定义 static var sector_colors_array: [UIColor] = [] // 初始化时改为存储UIColor sector_colors_array = [UIColor](repeating: .black, count: total_map_sectors) // 此时原来的赋值代码可以直接正常运行 - 修复UIView数组初始化的越界问题,把
viewDidLoad里初始化数组的赋值逻辑改为用append追加元素:for map_sector_index in 0...App.total_map_sectors-1 { let new_UIView = UIView() new_UIView.translatesAutoresizingMaskIntoConstraints = false // 不要直接用下标给空数组赋值,改为append ViewController.map_sectors_UIView.append(new_UIView) }
内容的提问来源于stack exchange,提问作者Doug Null
相关产品推荐
相关产品推荐

