根据使用Swift与Cocoa和Objective-C,您可以使用takeUnretainedValue()
并takeRetainedValue()
告诉Swift如何管理对象的内存,如下所示:
func StringByAddingTwoStrings(CFString!, CFString!) -> Unmanaged<CFString>!
Run Code Online (Sandbox Code Playgroud)
我何时必须使用takeUnretainedValue()
或takeRetainedValue()
?
当我使用ARC时,它总是takeUnretainedValue()
吗?
import Foundation
import MobileCoreServices
func checkFileExtension(fileName: NSString){
println(fileName)
var fileExtension:CFStringRef = fileName.pathExtension
println(fileExtension)
var fileUTI:CFStringRef = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, fileExtension, nil)
println(fileUTI)
let testBool = UTTypeConformsTo(fileUTI, kUTTypeImage) != 0
if testBool{
println("image")
}
}
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
错误:'Unmanaged'不能转换为'CFStringRef'
在线
var fileUTI:CFStringRef = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,fileExtension,nil)
有任何想法吗 ??谢谢
有没有办法将所有不同的UTType 扩展类型获取为字符串?我专门需要它们来处理图像、音频和视频。
我遵循了这个答案,但它没有给我所有的扩展
var types = [String]()
let utiTypes = [kUTTypeImage, kUTTypeMovie, kUTTypeVideo, kUTTypeMP3, kUTTypeAudio, kUTTypeQuickTimeMovie, kUTTypeMPEG, kUTTypeMPEG2Video, kUTTypeMPEG2TransportStream, kUTTypeMPEG4, kUTTypeMPEG4Audio, kUTTypeAppleProtectedMPEG4Audio, kUTTypeAppleProtectedMPEG4Video, kUTTypeAVIMovie, kUTTypeAudioInterchangeFileFormat, kUTTypeWaveformAudio, kUTTypeMIDIAudio, kUTTypeLivePhoto, kUTTypeTIFF, kUTTypeGIF, kUTTypeQuickTimeImage, kUTTypeAppleICNS]
for type in utiTypes {
let str = String(type)
guard let utiStr = fileExtension(for: str) else { continue }
types.appent(utiStr)
}
dump(types)
Run Code Online (Sandbox Code Playgroud)
结果是
15 elements // there are really 21 types
- "jpeg"
- "png"
- "mov"
- "mpg"
- "m2v"
- "ts" …
Run Code Online (Sandbox Code Playgroud) ios swift uidocumentpickerviewcontroller mobilecoreservices uttype