首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xcode5中的CF_IMPLICIT_BRIDGING_ENABLED不起作用?

xcode5中的CF_IMPLICIT_BRIDGING_ENABLED不起作用?
EN

Stack Overflow用户
提问于 2014-01-06 05:16:35
回答 2查看 674关注 0票数 2

WWDC 2013课程幻灯片包含一个部分,在某些情况下可以省略显式桥接转换。这是我用Xcode5编写的(使用的是10.8,而不是10.9),编译器抱怨我需要一个桥接类型转换。我是不是完全不理解这个概念?

代码语言:javascript
复制
#import <Foundation/Foundation.h>

CF_IMPLICIT_BRIDGING_ENABLED
CFStringRef MyCreateStringFromNothing();
CF_IMPLICIT_BRIDGING_DISABLED

void SomeFunction() {
    // compiler requires bridging cast here...
    NSString* x = MyCreateStringFromNothing();    
}

我问这个问题的原因是我想写:

代码语言:javascript
复制
NSString* s = CFUUIDCreateString(NULL, uuid);

我认为关于隐式桥接的新工作应该能让我简单地写出这篇文章。但这也需要一个桥接演员。

EN

回答 2

Stack Overflow用户

发布于 2014-01-06 10:13:32

这似乎是一种黑魔法,但从我的实验来看,其中的"Create“函数不能与隐式桥接一起工作。

当我编译这段代码时:

代码语言:javascript
复制
CF_IMPLICIT_BRIDGING_ENABLED
CFStringRef MyCreateStringFromNothing();
CFStringRef MyGetStringFromNothing();
CF_IMPLICIT_BRIDGING_DISABLED

void SomeFunction() {
    NSString *const fails1 = MyCreateStringFromNothing();
    NSString *const fails2 = CFStringCreateCopy(kCFAllocatorDefault, CFSTR("FOO"));

    NSString *const works = MyGetStringFromNothing();
}

前两个方法失败了,但第三个方法“有效”。

请注意,隐式桥接显然仍然无法阻止编译器警告您将CFStringRef转换为NSString *,它只是停止要求您插入__bridge。

您将注意到,在session 404的session 404中的幻灯片中,他使用了CFDictionaryGetValue(),该函数返回一个“WWDC2013 *",因此它是少数几个不会发出警告的函数之一。任何返回实际类型(例如CFStringRef或CFDictionary)的CF函数仍然会抛出警告,所以,请注意。

票数 2
EN

Stack Overflow用户

发布于 2014-01-06 10:09:25

检查项目和/或目标上的编译器设置。如果这是一个较旧的项目,您可能会有一个杂乱的选项,导致您使用较旧的编译器。(当我迁移到Xcode5并想要使用最新的Obj-C新特性时,这几次让我遇到了麻烦。)

最近,我总是在构建选项中选择“默认编译器”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20939291

复制
相关文章

相似问题

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