首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Swift创建Unmanaged<CFString>

从Swift创建Unmanaged<CFString>
EN

Stack Overflow用户
提问于 2015-12-05 00:32:09
回答 1查看 819关注 0票数 1

从Swift 2开始,接受C回调的C函数可以在没有中间包装器的情况下从Swift调用。

许多C事件处理API都遵循先创建上下文的模式:

代码语言:javascript
复制
struct Context {
    CFIndex version;
    void *info;
    CFAllocatorRetainCallBack retain;
    CFAllocatorReleaseCallBack release;
    CFAllocatorCopyDescriptionCallBack copyDescription;
}

然后在注册回调时将上下文传递给C API。当接收到事件时,info指针随事件一起传递给回调函数,允许我们恢复上下文状态(因为C函数不允许捕获状态)。

我希望正确地创建这样的上下文,包括retainreleasecopyDescription回调。

对于copyDescription,签名是

代码语言:javascript
复制
typealias CFAllocatorCopyDescriptionCallBack = 
    (UnsafePointer<Void>) -> Unmanaged<CFString>!

如何从Swift创建Unmanaged<CFString>!实例,即如何将Swift string对象从ARC内存模型转移到外部托管模型?

EN

回答 1

Stack Overflow用户

发布于 2015-12-05 01:34:13

请参阅问题注释。

代码语言:javascript
复制
let string = Unmanaged.passRetained("description")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34093005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档