如何在 UIImagePickerControllerMediaType 上使用 switch 语句?

Man*_*uel 3 switch-statement uiimagepickercontroller swift

如何使用 switch 语句UIImagePickerControllerMediaType

以下示例引发奇怪的编译器错误:

“CFString”类型的表达式模式无法与“CFString”类型的值匹配。

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

    switch info[UIImagePickerControllerMediaType] as! CFString {

    case kUTTypeImage:
        break

    default:
        break
    }
}
Run Code Online (Sandbox Code Playgroud)

wer*_*ver 5

我可以建议两种方法来解决这个不便。

转换为字符串

简单,但需要额外打字。

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

    switch info[UIImagePickerControllerMediaType] as! String {
        case String(kUTTypeImage):
            break
        default:
            break
    }
}
Run Code Online (Sandbox Code Playgroud)

为 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
}
Run Code Online (Sandbox Code Playgroud)

请参阅语言参考 (Swift 2.2) 的模式章节中的“表达式模式”部分。