我有一个Swift 3.1 NSString Extension,如下所示:
identical(arrange(res, UID) %>% as.matrix, arrange(res2, UID) %>% as.matrix)
## [1] TRUE
我试图从Objective-C调用它,但是我的projectname-Swift.h头文件中没有自动生成此函数。看起来像这样
enum MLCCapitalization : Int {
case upperCase
case lowerCase
case na
}
extension NSString {
func MLC_stringByCapitalizingFirstLetterWithCapitalization(_ capitalization: MLCCapitalization, locale: Locale) -> NSString {
let firstWordRange = rangeOfCharacter(from: CharacterSet.letters)
guard firstWordRange.location != NSNotFound && capitalization != .na else {
return self
}
let firstLetterRange = NSMakeRange(firstWordRange.location, 1)
var firstLetter = substring(with: firstLetterRange)
switch capitalization {
case .upperCase:
firstLetter = firstLetter.uppercased(with: locale)
case .lowerCase:
firstLetter = firstLetter.lowercased(with: locale)
case .na:
break
}
return replacingCharacters(in: firstLetterRange, with: firstLetter) as NSString
}
}
看起来好像这个扩展函数中的enum参数导致了问题(当我将它更改为Int时,它会生成。)这在Swift 3.0中运行良好。我错过了什么?
答案 0 :(得分:0)
所以这里的答案是从我的Swift扩展文件中删除枚举并将其放在Objective-C头文件中。此objc头文件可以包含在桥接头文件中,以便它也可供Swift使用。如果我不需要在我的一些Objective-C头文件中使用枚举,那么做@Hamish建议会有用。如果没有Swift扩展文件中的枚举,则无需使用@objc标记函数。感谢@Hamish指出我正确的方向。