Swift.Any as? CFType
open class AVPlayerItemVideoOutput : AVPlayerItemOutput {
public init(pixelBufferAttributes: [String : Any]? = nil)
}
보통 Swift 측에서 API 에 값을 던지는 분에는 아무것도 문제 없지만, 스스로
Any
에서 CoreFoundation
구체적으로는 ↑ 의 API 에 건네지는 [String : Any]
의 Any
를 CFAllocator
로서 꺼내고 싶다.보통 as?로 캐스트하면 좋을까?
🤔
이것을 알 수 있습니다 :
같은
CoreFoundation
유래의 형태에서도 CFString
이나 CFNumber
는 Swift 의 String
이나 Int
등에 as
로 안전하게 캐스트할 수 있으므로, 특히 곤란하지 않다.let value: Any? = "🤔"
guard let string = value as? String else { return }
let cfString = string as CFString
다만
CFAllocator
등은 대응하는 Swift나 Objective-C의 형태가 없기 때문에, 무엇인가 다른 수단으로 형태를 제대로 확인하고 나서 as!
로 캐스트하게 된다.CFGetTypeID(_:)로 형식 확인
그래서 :
let value: Any? = attributes[kCVPixelBufferMemoryAllocatorKey as String]
let allocator: CFAllocator?
if CFGetTypeID(value as CFTypeRef!) == CFAllocatorGetTypeID() {
allocator = (value as! CFAllocator)
} else {
allocator = nil
}
이제
Any
에서 CFAllocator
로 캐스팅 할 수있었습니다. CFGetTypeID(_:) 에는 Swift 의 형태를 던져도 예외로 멈추는 일은 없기 때문에 , 형태의 일치 판정에 사용하는 분에는 문제 없을 것 같다.참고
Reference
이 문제에 관하여(Swift.Any as? CFType), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/junpluse/items/e334e511457f8c133de9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)