【发布时间】:2017-09-21 08:21:09
【问题描述】:
所以我刚开始为我正在做的一个项目“学习”swift,我遇到了一个非常有趣的场景,我不知道为什么会这样。
所以我的项目的基本要点如下:我有一个州法律的 SQLite 数据库,它基本上是一个有 4 列的 excel 表;部分,法律,注意,标签。我的应用程序所做的只是将此数据库预加载到用户手机或模拟器上,并允许用户根据标签搜索法律。多个法律可以具有相同的标签,在这种情况下,我将显示带有此类标签的所有法律的预览,并让用户选择一个。
这是处理此标签搜索的 ViewController:
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
//}
}
当我选择“自然资源”作为我的tagChosen 时,我得到了以下结果,这是控制台输出:
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
真的应该打印出true 用于其中的 3 张支票。理想情况下,我会将匹配的那 3 行放入一个数组中,并用它来向用户展示可能的规律。任何人都可以帮忙吗?如果您需要更多信息,请告诉我。
【问题讨论】:
-
你试过 String.compare(anotherString : String) 吗?
-
会不会是
String(row[self.tag])有一个尾随换行符? – 试试print(String(row[self.tag]).debugDescription -
只是一个建议:永远不要为 UI 或任何其他 SDK 提供的类前缀添加前缀。如果您对自己创建的类有自己的转换,那就更好了。