将Objective-C翻译为Swift - 错误:输入' Int'不符合协议' BooleanType'

时间:2014-12-08 10:38:10

标签: objective-c swift methods nsstring boolean

我在google和SO上搜索但是没有找到任何有用的帮助来解决这个问题。 我正在尝试将此代码从objective-c转换为swift:

- (void)metaTitleUpdated:(NSString *)title {
NSLog(@"delegate title updated to %@", title);

NSArray *chunks = [title componentsSeparatedByString:@";"];
if ([chunks count]) {
    NSArray *streamTitle = [[chunks objectAtIndex:0] componentsSeparatedByString:@"="];
    if ([streamTitle count] > 1) {
        titleLabel.text = [streamTitle objectAtIndex:1];
    }
}
}

到目前为止,我已将其翻译为:

func metaTitleUpdated(input: String) {
    println("delegate title updated to \(title)")

    let chunks: NSArray = title!.componentsSeparatedByString(";")
    if (chunks.count) {
        let streamTitle = chunks .objectAtIndex(0) .componentsSeparatedByString(";")
        if (streamTitle.count > 1) {
        titleLabel.text = streamTitle.objectAtIndex(1)
        }
    }

}    

但我总是得到错误“类型'Int'不符合协议'BooleanType'”行:if(chunks.count){

导致此错误的原因是什么? swift中的其余代码是否正确或是否有其他错误?

2 个答案:

答案 0 :(得分:2)

chunks.count的类型为Int,但if语句需要布尔表达式。 这与(Objective-)C不同,其中if语句的控制表达式可以具有任何标量类型并与零进行比较。

所以

的相应Swift代码
if ([chunks count]) { ... }

if chunks.count != 0 { ... }

答案 1 :(得分:0)

我自己解决了答案。

func metaTitleUpdated(title: String) {
    var StreamTitle = split(title) {$0 == "="}
    var derRichtigeTitel: String = StreamTitle[1]
  titleLabel.text = derRichtigeTitel
    println("delegate title updated to \(derRichtigeTitel)")
}