2017-07-14 59 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) 
相关问题