2016-11-29 3 views
2

Was ist der richtige Weg, dies in Swift 3 zu schreiben?Swift3: Kombination von zwei Uint64-Optionen

let ld = NSDataDetector(types: NSTextCheckingResult.CheckingType.address | NSTextCheckingResult.CheckingType.phoneNumber) 

Dies ist, was ich bekommen:

Binäroperators | kann nicht auf zwei NSTextCheckingResult.CheckingType-Operanden angewendet werden.

Ich weiß, dass sie beide UInt64 sind, aber ich habe keine Ahnung, wie man sie kombiniert.

Antwort

0

den Rohwert dieser Konstanten als Typ verwenden CheckingType ist keine int Variante:

NSDataDetector(types: NSTextCheckingResult.CheckingType.address.rawValue | NSTextCheckingResult.CheckingType.phoneNumber.rawValue) 
0

Adresse in NSTextCheckingResult.CheckingType.address eine ENUM Fall ist, nicht UInt64. Der Rohwert ist UInt64, so dass Sie Rohwert wie diese verwenden können,

do{ 

let ld = try NSDataDetector(types: NSTextCheckingResult.CheckingType.address.rawValue | NSTextCheckingResult.CheckingType.phoneNumber.rawValue) 

}catch{ 
    print("error") 
} 
+0

Weiter mehr, kann es werfen Fehler .. besser verwenden versuchen catch Block Ich habe die Antwort mit Versuch Catch-Block bearbeitet –

1

Try this

do { 
    let ld = try NSDataDetector(types: NSTextCheckingResult.CheckingType.address.rawValue | NSTextCheckingResult.CheckingType.phoneNumber.rawValue) 
} 
catch { 

} 
0

ich persönlich mit einem funktionalen Ansatz gehen würde, durch eine Reihe von CheckingType Werten. Dadurch wird die Code-Duplizierung reduzieren und macht es leicht, neue Check-Typen an den Scanner hinzuzufügen:

let detectorTypes = [ 
    NSTextCheckingResult.CheckingType.address, 
    NSTextCheckingResult.CheckingType.phoneNumber 
].reduce(0) { $0 | $1.rawValue } 
let detector = try? NSDataDetector(types: detectorTypes) 

Oder, um weiter die Doppelungen in den Werten Präfixe zu reduzieren:

let types: [NSTextCheckingResult.CheckingType] = [.address, .phoneNumber] 
let detector = try? NSDataDetector(types: types.reduce(0) { $0 | $1.rawValue }) 
Verwandte Themen