2015-04-08 3 views
2

Я ищу способ печати связанных значений переписей в Swift. то есть. следующий код должен печатать "ABCDEFG" для меня, но это не так.Как печатать связанные значения в индексах Swift?

enum Barcode { 
    case UPCA(Int, Int, Int, Int) 
    case QRCode(String) 
} 

var productCode = Barcode.QRCode("ABCDEFG") 
println(productCode) 

// prints (Enum Value) 

Чтение ответы на this StackOverflow вопрос, который связан с издательским сырые значения перечислений, я попытался следующий код, но он дает мне ошибку

enum Barcode: String, Printable { 
    case UPCA(Int, Int, Int, Int) 
    case QRCode(String) 
    var description: String { 
     switch self { 
      case let UPCA(int1, int2, int3, int4): 
       return "(\(int1), \(int2), \(int3), \(int4))" 
      case let QRCode(string): 
       return string 
     } 
    } 
} 

var productCode = Barcode.QRCode("ABCDEFG") 
println(productCode) 

// prints error: enum cases require explicit raw values when the raw type is not integer literal convertible 
//  case UPCA(Int, Int, Int, Int) 
//   ^

Поскольку я новичок в Swift I не может понять, что такое сообщение об ошибке. Может ли кто-нибудь узнать, возможно ли это или нет.

+0

'случай пусть (а, б)' такой же, как 'случае (пусть, пусть б)' – rkb

ответ

2

Проблема в том, что вы добавили явный необработанный тип в ваш Barcode enum- String. Заявив, что он соответствует Printable все, что вам нужно:

enum Barcode: Printable { 
    case UPCA(Int, Int, Int, Int) 
    case QRCode(String) 
    var description: String { 
     // ... 
    } 
} 

жалоба составителя является то, что вы не указали исходные значения с нецелых типа необработанного значения, но вы не можете сделать это с помощью соответствующих значений в любом случае , Сырые строковые значения, без связанных типов, может выглядеть следующим образом:

enum CheckerColor: String, Printable { 
    case Red = "Red" 
    case Black = "Black" 
    var description: String { 
     return rawValue 
    } 
} 
+0

Теперь это не дает ошибку но все равно печатает '(Enum Value)' при использовании онлайн-компилятора [runswiftlang.com] (http://www.runswiftlang.com/) – rkb

+0

Не все среды будут распознавать соответствие протокола «Printable». Если вы все еще это понимаете, используйте свойство 'description' напрямую, пока среда не будет обновлена ​​до Swift 1.2 (я думаю):' println (productCode.description) ' –

Смежные вопросы