2017-08-24 1 views
1

Ich habe Textrichtungscode seiner Arbeit gut mit schnellen 3, aber nach der Migration zu schnellen 4, ich habe FehlerWerte vom Typ ‚NSLinguisticTag‘ hat kein Mitglied ‚Reichweite‘

let tagScheme = [NSLinguisticTagScheme.language] 
    let tagger = NSLinguisticTagger(tagSchemes: tagScheme, options: 0) 
    tagger.string = self.text 
    let lang  = tagger.tag(at: 0, scheme: NSLinguisticTagScheme.language, 
             tokenRange: nil, sentenceRange: nil) 

    if lang?.range(of: "he") != nil || lang?.range(of: "ar") != nil { //Value of type 'NSLinguisticTag' has no member 'range' 
     self.textAlignment = NSTextAlignment.right 
    } else { 
     self.textAlignment = NSTextAlignment.left 
    } 

Wer weiß, wie dieses Problem beheben? Dank

Antwort

1

Ab Swift 4, NSLinguisticTagger kehrt Tags nicht als (optional) Saiten, sondern als (optional) Werte von NSLinguisticTag:

public struct NSLinguisticTag : RawRepresentable, Equatable, Hashable { 
    public init(_ rawValue: String) 
    public init(rawValue: String) 
} 

Sie die zugrunde liegende Zeichenfolge mit der rawValue Eigenschaft erhalten:

if let lang = tagger.tag(at: 0, scheme: .language, tokenRange: nil, sentenceRange: nil) { 
    print(lang.rawValue) 
    if lang.rawValue.hasPrefix("he") { ... } 
} 

Wenn Sie auf Gleichheit und nicht auf Eindämmung prüfen möchten, können Sie auch Ihre eigenen NSLinguisticTag Konstanten definieren:

extension NSLinguisticTag { 
    static let hebrew = NSLinguisticTag("he") 
} 

und sie als

if let lang = tagger.tag(at: 0, scheme: .language, tokenRange: nil, sentenceRange: nil) { 
    if lang == .hebrew { ... } 
} 

Eine weitere Option wäre eine benutzerdefinierte berechnete Eigenschaft

extension NSLinguisticTag { 
    var isRightToLeft: Bool { 
     return rawValue.hasPrefix("he") || rawValue.hasPrefix("ar") 
    } 
} 

und als

if let lang = tagger.tag(at: 0, scheme: .language, tokenRange: nil, sentenceRange: nil) { 
    if lang.isRightToLeft { ... } 
} 
verwenden zu definieren
Verwandte Themen