如何将swift String转换为CFString

loo*_*sta 33 cfstring swift

如何在swift中从本机swift String或NSString创建CFString

    let path:String = NSBundle.mainBundle().pathForResource(name.stringByDeletingPathExtension, ofType:"pdf")
    let string:CFString = ??? path
    let url:CFURLRef = CFURLCreateWithFileSystemPath(allocator:kCFAllocatorDefault, filePath:string, pathStyle:CFURLPathStyle.CFURLPOSIXPathStyle, isDirectory:false)
Run Code Online (Sandbox Code Playgroud)

Mag*_*alp 35

刚刚施展它:

var str = "Hello, playground" as CFString
NSString(format: "type id: %d", CFGetTypeID(str))
Run Code Online (Sandbox Code Playgroud)

  • 这适用于字符串文字,但不适用于变量.当我尝试`var str = str1作为CFString`并且`str1`是`String`时,我得到"无法将表达式的类型'CFString'转换为'$ T1'." 当我显式键入`str`时,如`var str:CFString = str1 as CFString`,我得到"无法将表达式的类型'CFString'转换为'CFString'." 这是怎么回事? (2认同)

fre*_*tag 28

如果要转换非文字字符串,则必须将其强制转换为NSString.

let replacement = "World"
let string = "Hello, \(replacement)"

let cfstring:CFString = string as NSString
Run Code Online (Sandbox Code Playgroud)

Swift知道如何将swift字符串转换为NSString,将NSString转换为CFString,但似乎不知道如何在一个中执行这两个步骤.


Bot*_*ock 6

今天,我试图在操场上执行此操作以测试 C API,并且刚刚import Foundation成功"string" as CFString


use*_*430 5

您可以在 CFString 和 NSString 之间或 NSString 和 String 之间进行转换。技巧是在 CFString 和 String 之间转换时必须进行双重转换。

这有效:

var cfstr: CFString = "Why does Swift require double casting!?"
var nsstr: NSString = cfstr as NSString
var str: String = nsstr as String
Run Code Online (Sandbox Code Playgroud)

这会给出错误“'CFString'不是'NSString'的子类型”:

var cfstr: CFString = "Why does Swift require double casting!?"
var str: String = cfstr as String
Run Code Online (Sandbox Code Playgroud)