如何在swift中返回多个值

时间:2016-08-18 15:45:43

标签: ios arrays swift uitableview

我很快就是首发。 我创建tableview并从jsonFile获取数据以显示文本和图片。 然后我想在tableview上添加searchBar但是有问题。

try {
    pdf.close();
catch {
    //empty
}

这是我的代码。

import UIKit

    class EpisodesTableViewController: UITableViewController
    {
        var episodes = [Episode]()

        var names = [Episode]()

        let searchController = UISearchController(searchResultsController: nil)
        var filteredNames = [Episode]()

        func filterContentForSearchText(searchText: String) {
            filteredNames = self.names.filter { name in
                return name.title!.lowercaseString.containsString(searchText.lowercaseString)
            }
            tableView.reloadData()
        }





        override func viewDidLoad()
        {
            super.viewDidLoad()


            searchController.searchResultsUpdater = self
            searchController.dimsBackgroundDuringPresentation = false
            definesPresentationContext = true
            tableView.tableHeaderView = searchController.searchBar

            tableView.setContentOffset(CGPoint(x: 0, y: searchController.searchBar.frame.size.height), animated: false)

            tableView.estimatedRowHeight = tableView.rowHeight
            tableView.rowHeight = UITableViewAutomaticDimension
            tableView.separatorStyle = .None

            self.episodes = Episode.downloadAllEpisodes()
            self.tableView.reloadData()
        }

        override func preferredStatusBarStyle() -> UIStatusBarStyle {
            return .LightContent
        }

        // MARK: - Table view data source

        override func numberOfSectionsInTableView(tableView: UITableView) -> Int
        {
            return 1
        }

        override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
        {
            if searchController.active && searchController.searchBar.text != ""{
                return filteredNames.count
            }else{
                return names.count
            }
            return episodes.count
        }

        override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
        {

            let cell = tableView.dequeueReusableCellWithIdentifier("Episode Cell", forIndexPath: indexPath) as! EpisodeTableViewCell
            let episode = self.episodes[indexPath.row]

            let data: Episode

            if searchController.active && searchController.searchBar.text != "" {
                data = filteredNames[indexPath.row]
            }
            else {
                data = names[indexPath.row]
            }

            let titleName = data.title!

            cell.episode = episode
            cell.textLabel?.text = titleName

            return cell
        }

        override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
            if segue.identifier == "SendData"{
                if let detailPage = segue.destinationViewController as? detailEpisodeViewController {
                    if let indexpath = tableView.indexPathForSelectedRow {
                        let episode = episodes[indexpath.row]
                        detailPage.episode = episode
                    }
                }
        }
    }

}


    extension EpisodesTableViewController: UISearchResultsUpdating {

        func updateSearchResultsForSearchController(searchController: UISearchController) {
            filterContentForSearchText(searchController.searchBar.text!)
        }
    }

当我返回filteredNames和名称界面时,只显示seachbar。如果我返回过滤后的名称和剧集,则显示错误索引超出范围。 我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

如果你想返回两个值,只需返回如下所示:

return(DataType,DataType)

所以这可能是

func returnTouple() -> (String, AnyObject) {
    return ("Hello World", 1)
}

然后您可以这样访问它:

let (myString, myObject) = returnTouple()

myString == "Hello World"

你也可以通过.0和.1来访问returnTouple().0 == "Hello World"

接下来,

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if searchController.active && searchController.searchBar.text != "" {
        return filteredNames.count
    } else {
        return names.count
    }
    return episodes.count
}

此功能不起作用。在两个部分中都有一个带有return语句的if {} else {}。除非你说if {} else if {}这使得thrid return语句无法命中,所以它不应该存在。