2017-11-25 129 views
0

我不知道如何解决这个问题:有一个与字段的数据库:在领域中选择一列,并通过点击链接

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函数中)?)

回答

0

您已经拥有包含结果数组中链接的对象,所以您只需从数组中读取对象并获取其链接,然后将其转换为网址,并在出现这种情况时解救出来。

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) 
    } 
}