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.)