【问题标题】:How to store 2 types of CGPath definitions in an array in Swift如何在 Swift 中的数组中存储 2 种类型的 CGPath 定义
【发布时间】:2017-12-19 10:27:07
【问题描述】:

我想要一个数组来存储生成四边形和三次曲线所需的数据。为了做到这一点,我做了以下事情:

  1. 定义了具有 start、end、cp1 和 cp2 属性的 CubicCurve 结构
  2. 定义了具有 start、end 和 cp 属性的 QuadCurve 结构
  3. 定义了一个名为 Path 的枚举,其中包含具有 CubicCurve 关联值的cubicCurve 和具有 QuadCurve 关联值的 quadCurve。
  4. 定义了一个类型为 Path [Path]() 的数组

我定义了一个 CubicCurve 但不能将它添加到数组中,因为数组是 Path 类型的:

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] 或[Any] 更好。

【问题讨论】:

    标签: swift types enums


    【解决方案1】:

    尝试使用

    paths.append(.cubicCurve(curve))
    

    因为 'curve' 是 CubicCurve 类型的实例,而 'Path.cubicCurve(curve)' 是 Path 的实例。

    【讨论】:

      【解决方案2】:

      CubicPathPath 不是兼容的类型。

      要将新项目正确添加到 [Path],您需要一个 Path 值。嗯,casePath中只有两个,所以只能是其中之一——.cubicCurve.quadCurve

      显然你想要的是. cubicCurve。我们还需要在其中放入一个关联的值。您已经创建了一个CubicPath 实例,对吧?用那个!所以这是我们放入数组的值

      let path = .cubicCurve(curve)
      

      现在我们可以添加它了

      paths.append(path)
      

      【讨论】:

        猜你喜欢
        • 2020-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-08
        • 2021-08-09
        • 2019-03-06
        • 1970-01-01
        相关资源
        最近更新 更多