2017-01-09 48 views
0

我在学习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是确定的,如果它是零,然后我给你空字符串。我试图做类似的事情与数组,如果它是空的,则创建空数组,但不是零

代码进一步有功能,附加一定的价值:

(...) 
    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)]) 

在viewDidLoad中(),当我尝试从xxx类分配backgroundGradient我的主视图控制器文件存在一个问题:

(...) 
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等其他变量就像一个魅力,数组是一个问题。

+4

当你'演XXX()'你创建你的类的新实例与它自己的数组,它开始是空的。 – dan

+0

@dan so Xxx()创建backgroundGradient数组,它是空的?但是,我可以检索backgroundGradient而不创建classXxx = Xxx()?你能帮忙解决问题吗? – codddeer123

回答

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 
    ] 
} 
+0

哦,上帝,所以这意味着我做错了唯一的事情是在错误的地方调用函数。它现在在工作,但是有没有更好的方法来做到这一点?感谢帮助! – codddeer123

+0

我不确定你到底想要什么。你想让classXxx总是以拥有这两种颜色开始吗? –

相关问题