주어진 코드에 두 가지 오류가 있습니다.
첫 번째
error: raw type 'CGPoint' is not convertible from any literal
enum MyEnum : CGPoint {
그래서 우리는 그것을 준수하여이 문자열에서 변환 문자 만들기 위해 CGPoint을 확장하는 것입니다 해결하기 위해 문자
한 가지 방법에서 CGPoint 컨버터블 할 필요가있다 StringLiteralConvertible
extension CGPoint : StringLiteralConvertible {
static func convertFromStringLiteral(value: String) -> CGPoint {
return NSPointFromString(value) // CGPointFromString on iOS
}
static func convertFromExtendedGraphemeClusterLiteral(value: String) -> CGPoint {
return NSPointFromString(value) // CGPointFromString on iOS
}
}
문자열 리터럴에서 CGPoint를 만들 수 있습니다!
var p : CGPoint = "2,3"
println(p) // print (2.0,3.0)
번째 오류는 현재 수정 그냥 리터럴
enum MyEnum : CGPoint {
case Zero = "0, 0"
case One = "1, 1"
case MagicPoint = "0, 42"
}
println(MyEnum.Zero.toRaw()) // (0.0,0.0)
println(MyEnum.One.toRaw()) // (1.0,1.0)
println(MyEnum.MagicPoint.toRaw()) // (0.0,42.0)
일부 문자열을 할당하고 지금은 CGPoint 원시 유형을 열거을 가지고 쉽게
error: enum cases require explicit raw values when the raw type is not integer literal convertible
case Zero
^
입니다
그것은 불가능처럼
if let p = MyEnum.fromRaw(CGPoint(x:0, y:42)) {
switch (p) {
case .Zero:
println("p is (0, 0)")
break
case .One:
println("p is (1, 1)")
break
case .MagicPoint:
println("p is magic point")
break
}
}
// print "p is magic point"
튜플에서 CGPoint를 만들 좋을 것이다, 그러나, 보인다. grammar
literal → integer-literal floating-point-literal string-literal
에서
가 문자 그대로의 세 가지 유형, 그래서
경우 제로 ='같은 튜플에서 만드는 더 좋은 것 (0, 0)'하지만 난 알아낼 방법 수 없다 아직해라. –
'switch '와 함께 자동으로 작동할까요, 아니면 패턴 매칭 연산자를 오버라이드해야할까요? – Sulthan
@Sulthan 내 업데이트를 참조하십시오 –