2017-08-24 13 views
1

私は迅速3との作業の良好なテキストの方向コードを持っていますが、迅速な4への移行後、私はこの問題を解決する方法をバリュータイプの「NSLinguisticTag」にはメンバー「範囲」を持っていない

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 
    } 

誰もが知っているエラーが発生しましたか?おかげではない(オプション) 文字列としてではなく、NSLinguisticTag(オプション)の値として

答えて

1

NSLinguisticTagger、スウィフト4のように戻りタグ:

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

あなたはrawValueプロパティを持つ基本となる文字列を取得します:

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

封じ込めでないかどうかを確認する場合は、 NSLinguisticTag定数を定義することもできます。

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

と別のオプションは、カスタム計算プロパティ

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

を定義し、

if let lang = tagger.tag(at: 0, scheme: .language, tokenRange: nil, sentenceRange: nil) { 
    if lang.isRightToLeft { ... } 
} 
としてそれを使用することです

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

としてそれらを使用します
関連する問題