首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >for循环中出现Swift编译器错误

for循环中出现Swift编译器错误
EN

Stack Overflow用户
提问于 2014-07-01 02:19:40
回答 2查看 343关注 0票数 0

当我尝试用下面的代码列出系统中的可用字体时,我得到了附加的错误消息。我的代码有什么问题吗?或者这是一个编译器错误?

代码语言:javascript
复制
for fontFamilyName: String! in UIFont.familyNames() {
  for fontName: String! in UIFont.fontNamesForFamilyName(fontFamilyName) {
    println("font: \(fontName)")
  }
}

错误消息:

代码语言:javascript
复制
0  swift                    0x0000000101678e08 llvm::sys::PrintStackTrace(__sFILE*) + 40
1  swift                    0x00000001016792f4 SignalHandler(int) + 452
2  libsystem_platform.dylib 0x00007fff8968a5aa _sigtramp + 26
3  libsystem_platform.dylib 0x0000000102a79a00 _sigtramp + 2034168944
4  swift                    0x00000001015759b7 llvm::StoreInst::StoreInst(llvm::Value*, llvm::Value*, bool, llvm::Instruction*) + 55
5  swift                    0x0000000100aca412 swift::irgen::IRBuilder::CreateStore(llvm::Value*, llvm::Value*, swift::irgen::Alignment) + 66
6  swift                    0x0000000100a9737c (anonymous namespace)::PayloadEnumImplStrategyBase::initialize(swift::irgen::IRGenFunction&, swift::irgen::Explosion&, swift::irgen::Address) const + 124
7  swift                    0x0000000100abd070 swift::irgen::SequentialTypeInfo<(anonymous namespace)::LoadableStructTypeInfo, swift::irgen::LoadableTypeInfo, (anonymous namespace)::StructFieldInfo, true>::initialize(swift::irgen::IRGenFunction&, swift::irgen::Explosion&, swift::irgen::Address) const + 224
8  swift                    0x0000000100abd070 swift::irgen::SequentialTypeInfo<(anonymous namespace)::LoadableStructTypeInfo, swift::irgen::LoadableTypeInfo, (anonymous namespace)::StructFieldInfo, true>::initialize(swift::irgen::IRGenFunction&, swift::irgen::Explosion&, swift::irgen::Address) const + 224
9  swift                    0x0000000100ae5a48 swift::SILVisitor<(anonymous namespace)::IRGenSILFunction, void>::visit(swift::ValueBase*) + 31240
10 swift                    0x0000000100add846 swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) + 8678
11 swift                    0x0000000100a5ecd8 swift::irgen::IRGenModule::emitGlobalTopLevel() + 184
12 swift                    0x0000000100acacc3 performIRGeneration(swift::IRGenOptions&, swift::Module*, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, swift::SourceFile*, unsigned int) + 1859
13 swift                    0x0000000100acb613 swift::performIRGeneration(swift::IRGenOptions&, swift::SourceFile&, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, unsigned int) + 51
14 swift                    0x0000000100a3d95a frontend_main(llvm::ArrayRef<char const*>, char const*, void*) + 4842
15 swift                    0x0000000100a3c65d main + 1533
16 libdyld.dylib            0x00007fff889d05fd start + 1
    1.  While emitting IR SIL function @_TFC10SwiftTests11AppDelegate11applicationfS0_FTCSo13UIApplication29didFinishLaunchingWithOptionsGSqCSo12NSDictionary__Sb for 'application' at /Users/hb/Developer/martsys/SwiftTests/SwiftTests/AppDelegate.swift:15:3

<unknown>:0: error: unable to execute command: Segmentation fault: 11
<unknown>:0: error: swift frontend command failed due to signal (use -v to see invocation)
EN

回答 2

Stack Overflow用户

发布于 2014-07-01 11:25:27

通过强制转换从类方法返回的数组会更好,如下所示:

代码语言:javascript
复制
for fontFamilyName in UIFont.familyNames() as Array<String!> {
    for fontName in UIFont.fontNamesForFamilyName(fontFamilyName) as Array<String!> {
        println("font: \(fontName)")
    }
}

// prints fontFamilyName: Marion,
//        font: Marion-Italic
//        font: Marion-Bold
//        font: Marion-Regular
//        fontFamilyName: Copperplate
//        font: Copperplate-Light
// etc.
票数 0
EN

Stack Overflow用户

发布于 2014-07-01 02:53:38

我想,两者都有。你的代码是错误的,它暴露了一个编译器错误。它似乎在类型断言String!上爆炸了。我认为这是因为UIFont.familyNames()的返回类型是AnyObject[]!。这里的!意味着它被强制解包,所以您希望返回一个AnyObject[],而不是Optional<AnyObject>。因此,String!不是Optional,这应该是一个具有良好消息的错误,而不是使Xcode崩溃的东西。

相反,您需要做的是告诉编译器它返回的AnyObject[]是String[]类型的:

代码语言:javascript
复制
for fontFamilyName in UIFont.familyNames() as String[] {
    for fontName in UIFont.fontNamesForFamilyName(fontFamilyName) as String[] {
        println("font: \(fontName)")
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24496464

复制
相关文章

相似问题

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