" __弱类型(自我)weakSelf = self;"预期的在宣言结束时

时间:2015-08-21 16:35:48

标签: objective-c

我在Xcode 6.4中打开了两个项目。两者都使用以下声明:

- (void)startService
{
    __weak typeof(self) weakSelf = self;
    [self.messageOperationQueue addOperationWithBlock:^{
        NSDictionary *storedMessages = [mySettings get:kStorageName withDefault:@{} storageType:kMySettingsStorageTypeDiskMapped];
        [weakSelf.messages addEntriesFromDictionary:storedMessages];
    }];
}

但是,在一个项目中没有错误,在另一个项目中我得到编译器错误:

Expected ';' at end of declaration

它要我在__weak typeof(self)之后放一个分号。我怀疑我只是在做一些非常愚蠢的事情,但我很难弄明白什么。另外,我知道我可以将typeof(self)替换为myClass *

2 个答案:

答案 0 :(得分:28)

使用__typeof代替typeof

这是因为__typeoftypeof都是C的扩展名,但只有当语言是C的typeof变体时才会在Clang中启用GNUXX,但不是CXX

答案 1 :(得分:5)

我有类似的错误。 @Leo Natan是对的,如果你愿意,你可以将C语言改为GNU,如下所示:

在Project Navigator中转到Project - >目标 - >构建设置

寻找C语言方言并将其从c11或c99更改为GNU99,它将解决问题。现在你可以使用typeof()

我希望它有所帮助:)