2016-04-22 2 views
2

Как использовать оператор switch на UIImagePickerControllerMediaType?Как использовать оператор switch на UIImagePickerControllerMediaType?

Следующий пример бросает странную ошибку компилятора:

Expression pattern of type 'CFString' cannot match values of type 'CFString'.

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 

    switch info[UIImagePickerControllerMediaType] as! CFString { 

    case kUTTypeImage: 
     break 

    default: 
     break 
    } 
} 

ответ

3

Я могу предложить два пути решения этого неудобства.

Cast в строку

Простой, но требует дополнительного ввода.

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 

    switch info[UIImagePickerControllerMediaType] as! String { 
     case String(kUTTypeImage): 
      break 
     default: 
      break 
    } 
} 

Реализовать оператор сопоставления с образцом для CFString типа

Более сложно, но меньше печатать, если вам нужно переключение на CFString часто.

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 

    switch info[UIImagePickerControllerMediaType] as! CFString { 
     case kUTTypeImage: 
      break 
     default: 
      break 
    } 
} 

func ~=(pattern: CFString, value: CFString) -> Bool { 
    return pattern == value 
} 

См раздел "Выражение Pattern" в Patterns главы в справочнике по языку (Swift 2,2).

+0

шаблон соответствия оператора –

1

Другой способ решения этой проблемы является литье в NSString:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 

    switch info[UIImagePickerControllerMediaType] as! NSString { 
     case kUTTypeImage: 
      break 
     default: 
      break 
    } 
} 
+0

Я думаю, что это самое лучшее решение. – werediver

+0

@werediver Да еще короче, спасибо за то, что указали на ценную справочную информацию о шаблонах выражений в вашем ответе. – Manuel

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