我有一个Swift 3.1 NSString扩展,如下所示:
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
}
}我试图从Objective-C调用它,但是这个函数不会在我的projectname-Swift.h头文件中自动生成。它看起来像这样
@interface NSString (SWIFT_EXTENSION(ProjectName))
@end这个扩展函数中的枚举参数似乎是导致问题的原因(当我将其更改为Int时,它将被生成)。这在Swift 3.0中运行良好。我遗漏了什么?
发布于 2017-06-02 21:38:57
因此,这里的答案是从我的Swift扩展文件中删除枚举,并将其放入Objective-C头文件中。此objc头文件可以包含在桥接头文件中,以便也可用于Swift。如果我不需要在一些Objective-C头文件中使用枚举,那么按照@Hamish建议的操作就可以了。如果Swift扩展文件中没有枚举,就不需要用@objc标记函数。感谢@Hamish为我指明了正确的方向。
https://stackoverflow.com/questions/44316032
复制相似问题