2017-07-14 78 views
2

我想要一個數組來存儲生成四元和三元曲線所需的數據。爲了做到這一點,我也做了以下內容:如何在Swift中將2種類型的CGPath定義存儲在數組中

  1. 定義與性質的CubicCurve結構開始,結束,CP1 & CP2
  2. 定義的QuadCurve結構與性能的起點,終點和CP
  3. 定義的枚舉被稱爲Path,具有CubicCurve關聯值的cubicCurve的情況和具有QuadCurve關聯值的quadCurve的情況。
  4. 定義類型路徑[Path]()

我定義了一個CubicCurve但無法將其添加到陣列中的一個陣列,該陣列類型的路徑:

struct CubicCurve { 
    var start : CGPoint 
    var end : CGPoint 
    var cp1 : CGPoint 
    var cp2 : CGPoint 
} 

struct QuadCurve { 
    var start : CGPoint 
    var end : CGPoint 
    var cp : CGPoint 
} 

enum Path { 
    case cubicCurve(CubicCurve) 
    case quadCurve(QuadCurve) 
} 

let paths = [Path]() 

let start = CGPoint(100,100) 
let end = CGPoint(500,500) 
let cp1 = CGPoint(250,200) 
let cp2 = CGPoint(150,300) 

let curve = CubicCurve(start: start, end: end, cp1: cp1, cp2: cp2) 

paths.append(curve) // Doesn't work - path is of type Path, not CubicCurve 

如何真正得到我的價值觀到我的數組?

我沒有正式的CS培訓(好幾年前的'A'級CS),並且對Swift的類與結構與枚舉的更高級的使用有些朦朧,所以我可能會完全解決這個問題錯了。我認爲,我做的是比使用[AnyObject]或[任何]。

回答

2

嘗試使用

paths.append(.cubicCurve(curve)) 

因爲「曲線」是CubicCurve類型,但「路徑的一個實例更好。 cubicCurve(curve)'是路徑的一個實例。

1

CubicPathPath是不兼容的類型。

要正確添加新項目到[Path],您需要一個Path值。那麼,只有兩個casePath S,所以它只能是其中之一 - .cubicCurve.quadCurve

顯然,你想要的是一個. cubicCurve。我們還需要在其中添加相關的值。你已經創建了一個CubicPath實例,對嗎?使用它!因此,這裏就是我們正在付諸實施的數組現在

let path = .cubicCurve(curve) 

值,我們可以將它添加

paths.append(path) 
相關問題