2017-01-09 59 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總是以擁有這兩種顏色開始嗎? –

相關問題