2016-04-22 58 views
2

如何在UIImagePickerControllerMediaType上使用switch语句?如何在UIImagePickerControllerMediaType上使用switch语句?

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

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

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

投到字符串

很简单,但需要额外的打字。

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 
} 

见 “表达模式” 在语言参考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