【发布时间】:2017-01-10 07:45:33
【问题描述】:
我在学习 Swift 时遇到了问题。我有几个变量很好的类,但我想返回 [CGColor] 数组以在 UIView 中制作不同的背景渐变。
部分代码:
class Xxx{
var _output : String!
var _backgroundGradient : [CGColor]!
//checking if not nil
var output : String!{
if _output == nil{
_output = ""
}
return _output
}
var backgroundGradient : [CGColor]{
if _backgroundGradient?.isEmpty == false{
print("There are objects!")
} else{
print("There are no objects")
_backgroundGradient = [CGColor]()
}
return _backgroundGradient
}
所以你可以看到 _output 没问题,如果它是 nil,那么我分配空字符串。我试过用数组做类似的事情,如果它是空的,那么创建空数组但不是 nil
在代码中还有一个附加特定值的函数:
(...)
self._backgroundGradient.append(UIColor(red:1.00, green:0.79, blue:0.04, alpha:1.00).cgColor)
self._backgroundGradient.append(UIColor(red:0.97, green:0.41, blue:0.02, alpha:1.00).cgColor)
print("GRADIENT inside func -> \(self._backgroundGradient)")
(...)
正如我在 Xcode 的底部控制台中看到的,它显示正确:
GRADIENT inside func -> Optional([<CGColor 0x6000000b1340> [<CGColorSpace 0x6000000359e0> (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1; extended range)] ( 1 0.79 0.04 1 ), <CGColor 0x6080000b15e0> [<CGColorSpace 0x6000000359e0> (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1; extended range)] ( 0.97 0.41 0.02 1 )])
当我尝试从 xxx 类分配 backgroundGradient 时,在 viewDidLoad() 的主 ViewController 文件中出现问题:
(...)
var classXxx : Xxx!
override func viewDidLoad() {
super.viewDidLoad()
classXxx = Xxx()
let gradient: CAGradientLayer = CAGradientLayer()
gradient.colors = classXxx.backgroundGradient
print("MainVC GRADIENT -> \(gradient.colors)")
(...)
和控制台的输出:
MainVC GRADIENT -> Optional([])
问题一定是在 var backgroundGradient 中返回。每个其他变量,如 string、int 等都像一个魅力,数组是一个问题。
【问题讨论】:
-
当您执行
Xxx()时,您正在创建您的类的一个新实例,它自己的数组开始时为空。 -
@dan 所以 Xxx() 创建了空的 backgroundGradient 数组?但是我可以在不创建 classXxx = Xxx() 的情况下检索 backgroundGradient 吗?你能帮忙解决问题吗?