1

UIImagePickerViewController의 대리자 메서드에서 미디어 유형을 테스트하고 싶습니다. kutTypeImage에 대해 UIImagePickerControllerMediaType을 테스트하는 방법은 무엇입니까?

스위프트 3 에서 근무 :

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

나는 오류없이이로 변경하지만, 형식 변환 : 스위프트 4

switch info[UIImagePickerControllerMediaType] as? NSString { 

    case .some(kUTTypeImage): 
    //... 
} 

그러나 , 그것은 오류가 발생합니다 우아한 보이지 않는 :

switch info[UIImagePickerControllerMediaType] as? String { 

    case .some(kUTTypeImage as NSString as String): 
    //... 
} 

나는 그것을 단축하려고 :

switch info[UIImagePickerControllerMediaType] as? NSString { 

    case .some(kUTTypeImage as NSString): 
    // ... 
} 

을하지만이 다시 오류가 발생합니다 :

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

ㄱ) 짧은 버전에서 오류가 발생하지만 이상 버전을 수행하지 않는 이유는 무엇입니까?

b) 좀 더 우아한 (더 짧은) 방법이 있습니까?

답변

0

사전 요소를 CFString으로 전송해야합니다.

Conditional downcast to CoreFoundation type ' CFString ' will always succeed

을 ... 그리고 나는 그것이 "항상 성공"으로, 단순히 as CFString을 사용하려고하면 : I 조건부 mediaType 랩을 해제하려고하면 이상하게

let mediaType = info[UIImagePickerControllerMediaType] as! CFString 

switch mediaType { 
case kUTTypeImage: 
    // 
default: break 
} 

, 엑스 코드는 불평 할 것이다

을 컴파일러는 조금 혼란처럼 이상한

' Any? ' is not convertible to ' CFString '; did you mean to use ' as! ' to force downcast?

는 것 같다. 어쨌든, 가장 간단한 솔루션 인 이 풀려 있지 않은 경우는 드물지만입니다.

+1

어떤 이유로 미디어 검색이 실패하고 정보 사전에 속성이없는 경우 예외가 발생합니다. 따라서 여기에 unwrap을 강요하지 않는 것을 선호합니다. – Manuel

+0

값이 'nil'이면 언 래핑하기 전에 확인할 수 있습니다. – the4kman

+0

사실이에요. 그러나 나는 애플에게 버그를 제기 할 것이다. – Manuel