在领域中选择一列,并通过点击链接
问题描述:
我不知道如何解决这个问题:有一个与字段的数据库:在领域中选择一列,并通过点击链接
import Foundation
import RealmSwift
import UIKit
class EventsDB: Object {
@objc dynamic var dataMonth = ""
@objc dynamic var dataDay = ""
@objc dynamic var desc = ""
@objc dynamic var link = ""
}
链接栏包含链接到一些事件。该SecondController类有一个showTutorial功能:
import Foundation
import UIKit
import RealmSwift
import SafariServices
class SecondController: UIViewController, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var linkGive: String?
var dayForSearch: String?
var monthForSearch: String? {
didSet {
guard let monthForSearch = self.monthForSearch else {
return
}
self.realevents = (try! Realm()).objects(EventsDB.self).filter("dataMonth = '\(monthForSearch)' && dataDay = '\(dayForSearch ?? "0")")
}
}
func showTutorial(_ which: Int) {
if let url = URL(string: "\((try! Realm()).objects(EventsDB.self).filter("link"))") {
let config = SFSafariViewController.Configuration()
config.entersReaderIfAvailable = true
let vc = SFSafariViewController(url: url, configuration: config)
present(vc, animated: true)
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
var realevents: Results<EventsDB>?
}
extension SecondController: UITableViewDataSource{
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
showTutorial(indexPath.row)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return realevents?.count ?? 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
else {
return UITableViewCell()
}
let realevent = realevents?[indexPath.row]
cell.textLabel?.text = realevent?.desc
return cell
}
}
问:我该如何选择列中的链接,使应用程序中打开此列中的链接? (我应该在URL中输入什么(在showTutorial函数中)?)
答
您已经拥有包含结果数组中链接的对象,所以您只需从数组中读取对象并获取其链接,然后将其转换为网址,并在出现这种情况时解救出来。
func showTutorial(_ index: Int) {
guard let url = realevents?[index].link.flatMap { URL(string: $0)} else {
return
}
let config = SFSafariViewController.Configuration()
config.entersReaderIfAvailable = true
let vc = SFSafariViewController(url: url, configuration: config)
present(vc, animated: true)
}
}