我在学习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等其他变量就像一个魅力,数组是一个问题。
答案 0 :(得分:1)
问题是你没有调用将颜色添加到backgroundGradient数组的函数。
在创建Xxx对象后,您需要更改此代码段以进行函数调用。
(...)
var classXxx : Xxx!
override func viewDidLoad() {
super.viewDidLoad()
classXxx = Xxx()
// Call function to add colors to the backgroundGradient array
classXxx.addColors() // Change 'addColors()' to the name of the function which contains the lines of code quoted below
let gradient: CAGradientLayer = CAGradientLayer()
gradient.colors = classXxx.backgroundGradient
print("MainVC GRADIENT -> \(gradient.colors)")
(...)
-
func addColors() {
(...)
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)")
(...)
}
-
编辑:
您可以使用默认值初始化变量来简化课程。
例如:
class Xxx {
var output : String = ""
var backgroundGradient : [CGColor] = [
UIColor(red:1.00, green:0.79, blue:0.04, alpha:1.00).cgColor,
UIColor(red:0.97, green:0.41, blue:0.02, alpha:1.00).cgColor
]
}