通过getter函数提供属性以符合协议时出现Swift编译器错误

通过getter函数提供属性以符合协议时出现Swift编译器错误,swift,Swift,我有一个类正试图符合NSFilePresenter协议。据我所知,只有两个要求,它们都是属性: var presentedItemURL: NSURL! { get } var presentedItemOperationQueue: NSOperationQueue! { get } 由于我正在将现有的Objective-C项目迁移到Swift,我已经将其中一个项目作为ivar进行维护,我希望维护: var _trackingURL: NSURL! = ... var presentedI

我有一个类正试图符合
NSFilePresenter
协议。据我所知,只有两个要求,它们都是属性:

var presentedItemURL: NSURL! { get }
var presentedItemOperationQueue: NSOperationQueue! { get }
由于我正在将现有的Objective-C项目迁移到Swift,我已经将其中一个项目作为ivar进行维护,我希望维护:

var _trackingURL: NSURL! = ...

var presentedItemURL: NSURL! {
    return _trackingURL
}

var presentedItemOperationQueue: NSOperationQueue! {
    return NSOperationQueue.mainQueue()
}
但是,由于Xcode中的“Swift编译器错误”,此构建失败,但没有指定我做错了什么。我有一个来自编译器的堆栈跟踪,但我无法解释根问题是什么:

0  swift                    0x000000010b10b608 llvm::sys::PrintStackTrace(__sFILE*) + 40
1  swift                    0x000000010b10baf4 SignalHandler(int) + 452
2  libsystem_platform.dylib 0x00007fff92578f1a _sigtramp + 26
3  libsystem_platform.dylib 0x00007fd0c225e968 _sigtramp + 802052712
4  swift                    0x000000010a74797a (anonymous namespace)::ObjCPrinter::visitVarDecl(swift::VarDecl*) + 762
5  swift                    0x000000010a746f7d swift::ASTVisitor<(anonymous namespace)::ObjCPrinter, void, void, void, void, void, void>::visit(swift::Decl*) + 125
6  swift                    0x000000010a74abcb (anonymous namespace)::ObjCPrinter::printMembers(swift::IteratorRange<swift::DeclIterator>) + 251
7  swift                    0x000000010a747603 swift::ASTVisitor<(anonymous namespace)::ObjCPrinter, void, void, void, void, void, void>::visit(swift::Decl*) + 1795
8  swift                    0x000000010a74638e swift::printAsObjC(llvm::raw_ostream&, swift::Module*) + 1934
9  swift                    0x000000010a4d0b6e printAsObjC(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, swift::Module*) + 286
10 swift                    0x000000010a4d0178 frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 3592
11 swift                    0x000000010a4cf35d main + 1533
12 libdyld.dylib            0x00007fff978e45c9 start + 1

...

<unknown>:0: error: unable to execute command: Segmentation fault: 11
<unknown>:0: error: merge-module command failed due to signal (use -v to see invocation)
0 swift 0x000000010b10b608 llvm::sys::PrintStackTrace(u sFILE*)+40
1个swift 0x000000010b10baf4信号处理器(内部)+452
2 libsystem_platform.dylib 0x00007fff92578f1a_sigtramp+26
3 libsystem_platform.dylib 0x00007fd0c225e968_sigtramp+802052712
4 swift 0x000000010a74797a(匿名名称空间)::ObjCPrinter::visitVarDecl(swift::VarDecl*)+762
5 swift 0x000000010a746f7d swift::ASTVisitor::visit(swift::Decl*)+125
6 swift 0x000000010a74abcb(匿名命名空间)::ObjCPrinter::printMembers(swift::IteratorRange)+251
7 swift 0x000000010a747603 swift::ASTVisitor::visit(swift::Decl*)+1795
8 swift 0x000000010a74638e swift::printAsObjC(llvm::raw_ostream&,swift::Module*)+1934
9 swift 0x000000010a4d0b6e打印ASOBJC(标准::基本字符串常量,swift::模块*)+286
10 swift 0x000000010a4d0178前端_main(llvm::ArrayRef,char const*,void*)+3592
11 swift 0x000000010a4cf35d干管+1533
12 libdyld.dylib 0x00007fff978e45c9开始+1
...
:0:错误:无法执行命令:分段错误:11
:0:错误:由于信号原因,合并模块命令失败(使用-v查看调用)

如果编译器能够经受住我对它所做的一切,那就太好了,但我宁愿在我的代码中纠正这个问题,不管它是什么。

当我在类扩展中编写这样一个动态属性时,我也有一个类似的问题:

class MyClass {
  func test() {
    let myVar = myProperty
  }
}

extension MyClass {
  var myProperty: String { return "TEST" }
}

MyClass().test()
这会使XCode在放置在游乐场时崩溃,并导致生成失败,当此类代码包含在我的项目中的
.Swift
文件中时,会出现神秘的“Swift编译器错误”


可能有关系,无论如何我报告了(rdar://17527780 我想。)

还有一个附带问题:当计算
var
的返回值时,调用了哪些“getter函数”?它看起来不像是一个getter,更像是一个“动态属性”,但我找不到一个正确术语的例子。这肯定是编译器中的一个bug。报告它。肯定报告它-我来这里只是想找出我在代码中犯了什么错误,如果有的话。报告,我会发回。rdar://17186304Are 有什么解决办法吗?实际上,只有在您访问该属性时才会发生这种情况。如果您从未访问过它,构建就会成功。如果您在getter块中定义
return
值,构建是否会更好?(
get{…}