首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动生成的带有枚举参数的Swift扩展函数

自动生成的带有枚举参数的Swift扩展函数
EN

Stack Overflow用户
提问于 2017-06-02 03:52:56
回答 1查看 65关注 0票数 1

我有一个Swift 3.1 NSString扩展,如下所示:

代码语言:javascript
复制
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头文件中自动生成。它看起来像这样

代码语言:javascript
复制
@interface NSString (SWIFT_EXTENSION(ProjectName))
@end

这个扩展函数中的枚举参数似乎是导致问题的原因(当我将其更改为Int时,它将被生成)。这在Swift 3.0中运行良好。我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2017-06-02 21:38:57

因此,这里的答案是从我的Swift扩展文件中删除枚举,并将其放入Objective-C头文件中。此objc头文件可以包含在桥接头文件中,以便也可用于Swift。如果我不需要在一些Objective-C头文件中使用枚举,那么按照@Hamish建议的操作就可以了。如果Swift扩展文件中没有枚举,就不需要用@objc标记函数。感谢@Hamish为我指明了正确的方向。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44316032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档