【问题标题】:How to convert a String type variable to CFString in Swift?如何在 Swift 中将 String 类型变量转换为 CFString?
【发布时间】:2014-06-18 22:21:24
【问题描述】:

我从 iOS 教程中学到了这一点,但它不起作用

func imagePickerController(picker: UIImagePickerController!, didFinishPickingMediaWithInfo info: NSDictionary!) {
    var mediaType = info.objectForKey(UIImagePickerControllerMediaType) as String
    var originalImage, editedImage, imageToUse: UIImage

    // Handle a still image picked from a photo album
    if (CFStringCompare(CFStringRef(mediaType), kUTTypeImage, 0) == CFComparisonResult.CompareEqualTo) {
        editedImage = info.objectForKey(UIImagePickerControllerEditedImage) as UIImage
        originalImage = info.objectForKey(UIImagePickerControllerOriginalImage) as UIImage

        if (editedImage) {
            imageToUse = editedImage
        } else {
            imageToUse = originalImage
        }

        // Do something with imageToUse
    }

它不断提醒我

CFStringRef 不能用 '@lvalue String' 构造

所以我尝试了这个:

// Handle a still image picked from a photo album
    var temp = mediaType as CFString
    if (CFStringCompare(temp, kUTTypeImage, 0) == CFComparisonResult.CompareEqualTo) {
        editedImage = info.objectForKey(UIImagePickerControllerEditedImage) as UIImage
        originalImage = info.objectForKey(UIImagePickerControllerOriginalImage) as UIImage

它提醒我

无法将表达式的类型“CFString”转换为类型“$T1”

【问题讨论】:

    标签: swift ios8 xcode6


    【解决方案1】:

    Swift.StringNSString 自动桥接,NSStringCFString 可以相互转换,但你不能(现在?)从 Swift String 一直过渡到CFString 没有额外的一两个演员。

    这是一个 Swift 字符串,一个接受 CFString 的函数,以及如何通过转换为 NSString 来调用它:

    var str = "Hello, playground"
    
    func takesCFString(s: CFString) {}
    
    takesCFString(str as NSString)
    

    请注意,您不需要在 Swift 中使用 CFStringRef(并且大多数 CFString API 的 Swift 声明都不需要)。编译器利用 Xcode 5 引入的 CF 类型的自动 ARC 桥接,让您将这些类型视为 Swift(或 ObjC)对象。

    【讨论】:

      【解决方案2】:
      var str = "string"
      var cfstr:CFString = str as NSString // OR str.__conversion()
      

      【讨论】:

      • 使用此方法时出错:“'NSString 不是 'CFstring' 的子类型”。但是,注释部分似乎有效。
      猜你喜欢
      • 2014-07-28
      • 2019-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多