ich einen Swift 3.1 NSString Erweiterung haben, die wie folgt aussieht:Automatisch generierte Swift-Erweiterungsfunktionen mit Enum Parameter
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
}
}
Ich versuche, das von Objective-C zu nennen, aber diese Funktion nicht in automatisch generierte wird mein Projektname-Swift.h-Header-Datei. Es sieht aus wie diese
@interface NSString (SWIFT_EXTENSION(ProjectName))
@end
Es scheint, als ob die Enum Parameter in dieser Erweiterungsfunktion das Problem verursacht (wenn ich es in ein Int ändern, wird es erzeugt.) In Swift Dies funktionierte gut 3,0. Was vermisse ich?
Wenn Sie etwas mit Obj-C aussetzen wollen, sollten Sie es als '@ objc' markieren;) – Hamish
Uhmmm ... das ist eine Erweiterung einer Systemklasse, nicht meine eigene Klasse. Und diese Erweiterung öffentlich zu machen, hilft nicht. – ASchuerholz
Ja, aber weil 'MLCCapitalization' nicht als' @objc' gekennzeichnet ist, wird Ihre Methode nicht als '@ objc' bezeichnet. Sie sollten * sowohl * MLCCapitalisation' als auch die Methode als '@ objc' (' public' ist irrelevant) markieren, zumal die Methoden, die zu 'NSObject' abgeleiteten Klassen hinzugefügt werden, nicht mehr standardmäßig Obj-Cin ausgesetzt werden Swift 4. – Hamish