将NSString *转换为String并在Swift iOS中将Character作为参数传递的问题

时间:2015-04-08 08:15:31

标签: ios objective-c swift nsstring

我使用Bridging标头从Swift调用Objective方法。

-(NSString *) PatternSetCreator: (char)Signature detection_time_in_sec:(int)detection_time_in_sec patternLength:(int)patternLength maxPatternSetSize:(int)maxPatternSetSize

有两个问题:

a)从Swift

调用此方法时,我无法将单个字符作为参数传递

b)我不确定如何获取返回类型NSString并将其分配给String变量

1 个答案:

答案 0 :(得分:2)

Swift中的单个C char表示为CCharInt8的类型。

(类似地,Swift中的C intCIntInt32的类型

如果你想要一个特定的角色并且正在使用Swift 1.2,那么UInt8的初始值设定项需要UnicodeScalar。但是,令人讨厌的是,您必须将其转换为Int8以使其与C方法兼容:

    let ch = CChar(UInt8(ascii: "x"))
    let i = CInt(100)
    let s = obj.PatternSetCreator(ch, 
                   detection_time_in_sec: i, 
                   patternLength: i, 
                   maxPatternSetSize: i)

您不需要执行任何特殊操作即可将返回的NSString转换为String。桥接将自动完成。

(或者更确切地说,它将返回String! - 但如果目标c代码保证每次都返回一个有效的字符串,而不是空指针,则定义可以更改为-(nonnull NSString *) PatternSetCreator: etc…这意味着它将返回String而不是