返回数组并检查是否为零的正确方法

时间:2017-01-09 22:37:15

标签: ios arrays swift

我在学习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等其他变量就像一个魅力,数组是一个问题。

1 个答案:

答案 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
    ]
}