Ответ 1
Просто бросьте его:
var str = "Hello, playground" as CFString
NSString(format: "type id: %d", CFGetTypeID(str))
Как я могу создать CFString из собственной быстрой строки String или NSString в swift
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)
Просто бросьте его:
var str = "Hello, playground" as CFString
NSString(format: "type id: %d", CFGetTypeID(str))
Если вы хотите преобразовать нелитеративную строку, вы должны отправить ее в NSString.
let replacement = "World"
let string = "Hello, \(replacement)"
let cfstring:CFString = string as NSString
Swift знает, как преобразовать быструю строку в NSString и NSString в CFString, но, похоже, не знает, как сделать оба действия в одном.
Вы передали его между 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
Это дает ошибку "CFString" не является подтипом "NSString":
var cfstr: CFString = "Why does Swift require double casting!?"
var str: String = cfstr as String
Сегодня я пытался сделать это на игровой площадке для тестирования API C и только import Foundation
сделал работу "string" as CFString
.
Если вы пытаетесь преобразовать переменную, содержащую строку Swift, в CFString, я думаю, @freytag прибил ее своим объяснением.
В случае, если кто-то захочет увидеть пример, я подумал, что включу фрагмент кода, в котором я приведу строку Swift ( "ArialMT" в этом случае) в NSString, чтобы использовать ее с помощью функции CTFontCreateWithName из Core Text ( который требует CFString). (Примечание: приведение из NSString в CFString неявно).
// Create Core Text font with desired size
let coreTextFont:CTFontRef = CTFontCreateWithName("ArialMT" as NSString, 25.0, nil)
// Center text horizontally
var paragraphStyle: NSMutableParagraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = NSTextAlignment.Center
// Center text vertically
let fontBoundingBox: CGRect = CTFontGetBoundingBox(coreTextFont)
let frameMidpoint = CGRectGetHeight(self.frame) / 2
let textBoundingBoxMidpoint = CGRectGetHeight(fontBoundingBox) / 2
let verticalOffsetToCenterTextVertically = frameMidpoint - textBoundingBoxMidpoint
// Create text with the following attributes
let attributes = [
NSFontAttributeName : coreTextFont,
NSParagraphStyleAttributeName: paragraphStyle,
kCTForegroundColorAttributeName:UIColor.whiteColor().CGColor
]
var attributedString = NSMutableAttributedString(string:"TextIWantToDisplay", attributes:attributes)
// Draw text (CTFramesetterCreateFrame requires a path).
let textPath: CGMutablePathRef = CGPathCreateMutable()
CGPathAddRect(textPath, nil, CGRectMake(0, verticalOffsetToCenterTextVertically, CGRectGetWidth(self.frame), CGRectGetHeight(fontBoundingBox)))
let framesetter: CTFramesetterRef = CTFramesetterCreateWithAttributedString(attributedString)
let frame: CTFrameRef = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, attributedString.length), textPath, nil)
CTFrameDraw(frame, context)