Also ich habe gerade begonnen zu lernen "swift" für ein Projekt, das ich mache, und ich bin auf ein ziemlich interessantes Szenario gestoßen und ich kann nicht herausfinden, warum es passiert.Swift String-Vergleich fehlgeschlagen
Also der grundlegende Kern meines Projekts ist wie folgt: Ich habe eine SQLite-Datenbank der Landesgesetze, die im Grunde eine Excel-Tabelle mit 4 Spalten ist; Abschnitt, Gesetz, Hinweis, Tag. Und all meine App lädt diese Datenbank auf das Telefon des Benutzers oder den Simulator und erlaubt dem Benutzer, nach einem Gesetz zu suchen, das auf den Tags basiert. Mehrere Gesetze können dasselbe Tag haben, in diesem Fall würde ich eine Vorschau aller Gesetze mit einem solchen Tag anzeigen und den Benutzer auswählen lassen.
Hier mein Viewcontroller ist, dass diese Tag-Suche Griffe:
import UIKit
import MessageUI
import SQLite
class UISearchController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate, MFMessageComposeViewControllerDelegate {
var database2: Connection!
var table2: Table?
var lawTemp: String?
let section = Expression<String>("section")
let law = Expression<String>("law")
let note = Expression<String>("note")
let tag = Expression<String>("tag")
@IBAction func queryTable(_ sender: Any) {
do {
print("The chosen tag was: " + String(tagChosen.text!))
let laws = try self.database2.prepare(self.table2!)
print("CHECKPOINT 2")
for row in laws {
print(String(row[self.tag]) == String(tagChosen.text!))
print("because the current law tag is: " + String(row[self.tag]))
//print(row[Expression<String>("law")])
lawTemp = row[Expression<String>("law")]
}
}catch {
print(error)
}
print("QUERY DONE")
}
@IBOutlet weak var tagChosen: UITextField!
@IBAction func sendText(sender: AnyObject) {
if (MFMessageComposeViewController.canSendText())
{
let controller = MFMessageComposeViewController()
controller.body = String(describing: lawTemp)
//controller.recipients = [phoneNumber.text!]
controller.messageComposeDelegate = self
self.present(controller, animated: true, completion: nil)
}
}
func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {
//... handle sms screen actions
self.dismiss(animated: true, completion: nil)
}
override func viewWillDisappear(_ animated: Bool) {
self.navigationController?.isNavigationBarHidden = false
}
let tags = [String](arrayLiteral: "Public lands", "Definitions","Natural Resources","Powers","Risk Assesment","Land Disposition","Board Duties")
//MARK: - Picker View Data Sources and Delegates
func numberOfComponents(in tags: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return tags.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
tagChosen.text = tags[row]
return tags[row]
}
override func viewDidLoad()
{
super.viewDidLoad()
do {
let laws = try self.database2.prepare(self.table2!)
for lawl in laws {
print("SECTION: " + lawl[self.section])
print("TAG: " + lawl[self.tag])
print("NOTE: " + lawl[self.note] + "\n -----------------------------------------------------------------------------------------")
print("LAW: " + lawl[self.law])
}
} catch {
print(error)
}
let pickerView = UIPickerView()
pickerView.delegate = self
pickerView.dataSource = self
tagChosen.inputView = pickerView
}
//override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
//let dest = segue.destination
//let tableViewController = dest as! UILawTableViewController!
//tableViewController.table3 = table2
//tableViewController.database3 = database2
//}
}
und hier ist das, was ich bekomme, wenn ich „Natural Resources“, wie meine tagChosen
holen, das ist die Ausgabe der Konsole:
The chosen tag was: Natural Resources
CHECKPOINT 2
false
because the current law tag is:
Definitions
false
because the current law tag is:
Public lands
false
because the current law tag is:
Natural Resources
false
because the current law tag is:
Natural Resources
false
because the current law tag is:
Natural Resources
false
because the current law tag is:
Powers
false
because the current law tag is:
Board Duties
QUERY DONE
Es sollte wirklich true
für 3 dieser Prüfungen ausdrucken. Und im Idealfall würde ich diese 3 Zeilen dort platzieren, wo es eine Übereinstimmung in einem Array gibt, und diese verwenden, um dem Benutzer die möglichen Gesetze zu zeigen. Kann jemand helfen? Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.
Sie versuchen, haben String.compare (anotherString: String)? – CZ54
Könnte es sein, dass 'String (row [self.tag])' 'einen abschließenden Zeilenumbruch hat? - Versuchen Sie 'print (String (row [self.tag]). DebugDescription') –
Nur ein Vorschlag: Präfix UI oder andere SDK-Klassenpräfixe nicht Präfix.Es ist besser, wenn Sie eine eigene Konvertierung für die Klassen haben, die Sie erstellen – Rishi