【问题标题】:Querying a Struct in order to update UisearchController查询结构以更新 UisearchController
【发布时间】:2015-10-12 02:23:09
【问题描述】:

我有一个基本的 UITableviewController、UISearchResultsUpdating,我的数据保存在一个数组中的结构中,如下所示:

import UIKit

import Foundation


class SearchTableViewController: UITableViewController, UISearchResultsUpdating {
struct Melody {
        let category : String
        let name : String
        let location : String
    }


let songs = [Melody(category: "Morgen Lieder", name: "Mein Gott! nun ist e# wieder Morgen", location: "Lutheris¡ Gesangbu¡ (Lied 367)"),
    Melody(category: "Morgen Lieder", name: "Auf, auf‘ mein Geist! zu loben", location: "Lutheris¡ Gesangbu¡ (Lied 358)"),
    Melody(category: "Morgen Lieder", name: "Auf! ermunt‘re di¡ mein Sinn", location: "Lutheris¡ Gesangbu¡ (Lied 455)"),
    Melody(category: "Morgen Lieder", name: "Auf! meine Seel‘! und dank‘ dem Herren", location: "Lutheris¡ Gesangbu¡ (Lied 454)"),
    Melody(category: "Morgen Lieder", name: "Christe! Wahre# Seelenli¡t", location: "Lutheris¡ Gesangbu¡ (Lied 359)"),
    Melody(category: "Morgen Lieder", name: "Da# walte Gott! der mi¡ au# lauter Gnaden", location: "Lutheris¡ Gesangbu¡ (Lied 360)"),
    Melody(category: "Morgen Lieder", name: "Die Na¡t ist nun dahin", location: "Lutheris¡ Gesangbu¡ (Lied 361)"),
    Melody(category: "Morgen Lieder", name: "Du heilige Dreifältigkeit", location: "Lutheris¡ Gesangbu¡ (Lied 682)"),]

var filteredSongs = [Melody]()

    var resultSearchController = UISearchController()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.resultSearchController = UISearchController(searchResultsController: nil)
        self.resultSearchController.searchResultsUpdater = self

        self.resultSearchController.dimsBackgroundDuringPresentation = false
        self.resultSearchController.searchBar.sizeToFit()

        self.tableView.tableHeaderView = self.resultSearchController.searchBar

        self.tableView.reloadData()
    }

现在在搜索函数代码和 IF 语句之后,我正在尝试编写一个函数来像这样更新我的 UiSearchController;

func updateSearchResultsForSearchController(sear,chController: UISearchController)
    {
        self.filteredSongs.removeAll(keepCapacity: false)

        let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)

        let array = (Melody as NSArray).filteredArrayUsingPredicate(searchPredicate)

        self.filteredSongs = array as! [String]

        self.tableView.reloadData()
    }

但我得到一个错误:“SearchTableViewController.Melody.type”不能转换为“NSArray”就行了

let array = (Melody as NSArray).filteredArrayUsingPredicate(searchPredicate)

那么如何将我的 Struct 转换为 NSArray,或者当我的数据在 Struct 中时如何更新我的 SearchController?

提前致谢!!!!

【问题讨论】:

  • 旋律作为 NSArray -> 歌曲作为! NSArray
  • 你好,Quang,它仍然不接受它....你能提供完整的代码行作为例子吗?

标签: ios struct swift2


【解决方案1】:

替换你的代码

let array = (Melody as NSArray).filteredArrayUsingPredicate(searchPredicate)

let array = songs.filteredArrayUsingPredicate(searchPredicate)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-04
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 2013-05-21
    • 1970-01-01
    • 2014-01-29
    相关资源
    最近更新 更多