2014-09-27 30 views
2

我有这样的结构:斯威夫特结构没有找到成员

struct Direction { 
    let Left = CGPoint(x: -1, y: 0) 
    let Top = CGPoint(x: 0, y: -1) 
    let Right = CGPoint(x: 1, y: 0) 
    let Down = CGPoint(x: 0, y: 1) 

    let TopLeft = CGPoint(x: -1, y: -1) 
    let TopRight = CGPoint(x: 1, y: -1) 
    let DownLeft = CGPoint(x: -1, y: 1) 
    let DownRight = CGPoint(x: 1, y: 1) 

    let None = CGPointZero 
} 

我尝试使用这样的:

class AClass { 
    var point:CGPoint! 

    init() { 
     self.point = Direction.None // Direction.Type does not have a member named 'None' 
    } 
} 

我试图设置.Nonevarpublic但我似乎并不了解这一点。

回答

3

似乎您正在尝试使用该结构的静态成员,但您只声明了实例成员。将static添加到所有属性。

struct Direction { 
    static let Left = CGPoint(x: -1, y: 0) 
    static let Top = CGPoint(x: 0, y: -1) 
    static let Right = CGPoint(x: 1, y: 0) 
    static let Down = CGPoint(x: 0, y: 1) 

    static let TopLeft = CGPoint(x: -1, y: -1) 
    static let TopRight = CGPoint(x: 1, y: -1) 
    static let DownLeft = CGPoint(x: -1, y: 1) 
    static let DownRight = CGPoint(x: 1, y: 1) 

    static let None = CGPointZero 
} 
2

如果@ Kirsteins的假设是正确的,你需要为静态属性,那么就实现了同样的结果的另一种方法,可使用结构值,但在我以更好的方式意见:使用枚举。

但是,快速枚举只接受字符,字符串和数字作为原始值,而CGPoint由一对浮点组成。幸运迅速的给我们使用一个字符串指定一对,然后将其转化成CGFloat的能力:

extension CGPoint : StringLiteralConvertible { 
    public static func convertFromStringLiteral(value: StringLiteralType) -> CGPoint { 
     return CGPointFromString(value) 
    } 

    public static func convertFromExtendedGraphemeClusterLiteral(value: StringLiteralType) -> CGPoint { 
     return convertFromStringLiteral(value) 
    } 
} 

这个扩展可以让我们初始化CGFloat如下:

let point: CGPoint = "{1, -3}" 

随着在我们手中,我们可以如下定义枚举:

enum Direction : CGPoint { 
    case Left = "{-1, 0}" 
    case Top = "{0, -1}" 
    case Right = "{1, 0}" 
    case Down = "{0, 1}" 

    case TopLeft = "{-1, -1}" 
    case TopRight = "{1, -1}" 
    case DownLeft = "{-1, 1}" 
    case DownRight = "{1, 1}" 

    case None = "{0, 0}" 
} 

,并在您的代码段使用为:

class AClass { 
    var point:CGPoint! 

    init() { 
     self.point = Direction.None.toRaw() 
    } 
} 
+0

Daeem,这实际上是我一开始想要的,但是甚至没有知道这是可能的,所以问了一个struct! – Arbitur 2014-09-27 14:23:46