奇怪的错误,返回的值类型与函数体

时间:2017-08-03 05:18:59

标签: ios swift

我已将XlsxReaderWritter Framework添加到我的应用中。我在使用这个框架的第一步时遇到了麻烦,即在excel文件中获取工作表

这是我的代码:

let file = BRAOfficeDocumentPackage.open(syllabusFileURL.relativePath)! 
inputFile = file.workbook.worksheets[0] //this line does not compile and gives me this "Type [Any]! has no subscript members"

好的,所以我把它投成如下:

inputFile = file.workbook.worksheets[0] as! BRAWorksheet

现在它编译但我得到一个运行时错误说:

Could not cast value of type 'BRAWorksheet' (0x10df5fdc0) to 'BRAWorksheet' (0x10ce8e430).

所以似乎值已经BRAWorksheet并且不需要转换,但正如我所说它不会编译说它的类型[Any]!

在官方文档中,以下是他们如何获得工作表;

#####Swift

//First worksheet in the workbook
var firstWorksheet: BRAWorksheet = spreadsheet.workbook.worksheets[0]

//Worksheet named "Foo"
var fooWorksheet: BRAWorksheet = spreadsheet.workbook.createWorksheetNamed("Foo")

由于它是一个导入的框架,我检查了该函数的原始Objective-C文件。它似乎没有返回[Any]!这是身体:

- (NSArray *)worksheets {
    NSMutableArray *worksheets = @[].mutableCopy;

    for (BRASheet *sheet in _sheets) {
        BRAWorksheet *worksheet = [self.relationships relationshipWithId:sheet.identifier];
        worksheet.styles = _styles;
        worksheet.sharedStrings = _sharedStrings;
        worksheet.calcChain = _calcChain;
        [worksheets addObject:worksheet];
    }

    return worksheets.count ? worksheets : nil;
}

那么有人可以告诉我鸭子在做什么吗?!

2 个答案:

答案 0 :(得分:2)

如果您使用的是swift 3

let path: String = Bundle.main.path(forResource: "demo", ofType: "xlsx")!
let spreadsheet: BRAOfficeDocumentPackage = BRAOfficeDocumentPackage.open(path)
let worksheet: BRAWorksheet = spreadsheet.workbook.worksheets[0] as! BRAWorksheet
let sheet: BRASheet = spreadsheet.workbook.sheets[0] as! BRASheet
print(sheet.name) // print "Sheet1"

答案 1 :(得分:0)

您应该注意可选的结果:

var firstWorksheet: BRAWorksheet? = spreadsheet.workbook.worksheets?[0]