Verilen kodda iki hata var.
İlki
error: raw type 'CGPoint' is not convertible from any literal
enum MyEnum : CGPoint {
Buradan problemin uygun tarafından o String konvertibl edebi yapmak CGPoint uzatmaktır çözmek için literal
Bir biçiminden CGPoint konvertibl yapmak gerekir ise 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
}
}
Artık dize değişmezinden CGPoint oluşturabiliriz!
var p : CGPoint = "2,3"
println(p) // print (2.0,3.0)
ikinci hata, şimdi düzeltmek sadece kendisine edebi
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)
birkaç ip atamak ve şimdi CGPoint ham türü ile enum sahip kolaydır
error: enum cases require explicit raw values when the raw type is not integer literal convertible
case Zero
^
olduğunu
kullanımı mümkün değildir gibi
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"
başlığın gelen CGPoint oluşturmak için daha güzel olacak, ancak, görünüyor. grammar
literal → integer-literal floating-point-literal string-literal
itibaren
orada hazır bilgi sadece üç türü vardır, bu yüzden
durumda Zero = 'gibi başlığın gelen oluşturmak için daha güzel olacaktır (0,0)' ama anlamaya nasıl olamaz henüz yap. –
Otomatik olarak 'switch' ile çalışacak mı yoksa desen eşleştirme operatörünü geçersiz kılmaya mı çalışacaksınız? – Sulthan
@Sulthan Güncellememi görün –