ios - 类型 'BusinessData' 没有成员 'sortUsingComparator'

标签 ios swift sorting tableview

我从一个网址获取一些数据,并尝试在 TableView 中显示。在此之前,我直接使用了所有数组、搜索、排序。它运行良好。但是现在,当我为 TableView 创建单独的类时,我收到此错误

类型“BusinessData”在我的排序函数中没有成员“sortUsingComparator”。这里我给出了 3 个按钮操作。在该按钮操作内我声明了此排序代码。但现在我收到此错误。

我的businessData.swift

import UIKit

class BusinessData {

    var BusinessName: String?
    var Address: String?
    var Rating: Float?
    var ContactNumber: String?

    init(json: NSDictionary) {
        self.BusinessName = json["business_name"] as? String
        self.Address = json["location"] as? String
        self.Rating = json["__v"] as? Float
        self.ContactNumber = json["phone_no"] as? String


    }


}

我的viewcontroller.swift代码:

import UIKit


class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate {

    var isTapped:Bool?   // cell tap checking bool

    var selectedIndex:NSIndexPath?


    @IBOutlet weak var RightMenu: UIView!




    @IBOutlet weak var searchBar: UISearchBar!


    @IBOutlet weak var tableView: UITableView!   // UITable view declaration



    var arrDict = [BusinessData]()   // array to store the value from json

    var isSearching:Bool?

    var arrSearch:NSMutableArray=[]


    override func viewDidLoad() {


        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.jsonParsingFromURL()  // call the json method

        searchBar.returnKeyType = UIReturnKeyType.Done;
        searchBar.hidden = true;


        // nib for custom cell (table view)
        let nib = UINib(nibName:"customCell", bundle: nil)
        tableView.registerNib(nib, forCellReuseIdentifier: "cell")

         indicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 90, 90))
        indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
        indicator.center = self.view.center
        indicator.color = UIColor .redColor()
        self.view.addSubview(indicator)



    }
    override func viewWillAppear(animated: Bool) {
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "searchMethod:", name: "search", object: nil);
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "endSearch", name: "endSearch", object: nil);
    }




    // web services method
    func jsonParsingFromURL ()
    {
        let url:NSURL = NSURL(string: "http://sample url/Fes?current_location=toronto&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyIkX18")!

        if let JSONData = NSData(contentsOfURL: url)
        {
            if let json = (try? NSJSONSerialization.JSONObjectWithData(JSONData, options: [])) as? NSDictionary
            {
                if let reposArray = json["data"] as? [NSDictionary]
                {

                    for item in reposArray
                    {
                        let itemObj = item as? Dictionary<String,AnyObject>

                        let b_type = itemObj!["business_type"]?.valueForKey("type")


                        if (b_type as? String == "Taxis")
                        {

                            arrDict.append(BusinessData(json: item))

                        }
                    }
                }

            }
        }

    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int
    {
        if(isSearching == true)
        {
            return arrSearch.count;
        }
        return self.arrDict.count
    }


    // number of rows
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return 1
    }

    // height for each cell
    func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
    {
        return cellSpacingHeight
    }



    // calling each cell based on tap and users ( premium / non premium )
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
    {



        let cell:customCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as! customCell

        if(isSearching == true)
        {
            cell.vendorName.text = arrDict[indexPath.section].BusinessName
            cell.vendorAddress.text = arrDict[indexPath.section].Address
            cell.VendorRating.rating = arrDict[indexPath.section].Rating!
        }
        else
        {
            cell.vendorName.text = arrDict[indexPath.section].BusinessName
            cell.vendorAddress.text = arrDict[indexPath.section].Address
            cell.VendorRating.rating = arrDict[indexPath.section].Rating!
        }
        return cell
    }



    // MARK:
    // MARK: Sort Method

    @IBAction func sortByRevBtnPress(sender: AnyObject)
    {

        self.indicator.startAnimating()
        self.indicator.hidden = false
        RightMenu.hidden = true

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(1 * NSEC_PER_SEC)), dispatch_get_main_queue()){
            self.indicator.stopAnimating()
            self.indicator.hidden = true


        };
        self.tableView.reloadData()


    }


    @IBAction func sortByAZBtnPress(sender: AnyObject)
    {
        RightMenu.hidden = true



        BusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in

            if let name1 = dict1["business_name"] as? String, name2 = dict2["business_name"] as? String
            {
                return name1.compare(name2)
            }

            return .OrderedAscending
        }
        self.tableView.reloadData()
    }

    @IBAction func sortByRatingBtnPress(sender: AnyObject)
    {

        RightMenu.hidden = true

        BusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in

            if let name1 = dict1["rating"] as? String, name2 = dict2["rating"] as? String
            {
                return name2.compare(name1)
            }

            return .OrderedDescending
        }
        self.tableView.reloadData()


    }


    @IBAction func sortByRecentBtnPress(sender: AnyObject)
    {

        RightMenu.hidden = true

        BusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in

            if let name1 = dict1["created_at"] as? String, name2 = dict2["created_at"] as? String
            {
                return name2.compare(name1)
            }

            return .OrderedDescending
        }
        self.tableView.reloadData()
    }

    // MARK:
    // MARK: Search Method

    func endSearch()
    {
        if(isSearching == false)
        {
            isSearching = true;

            searchBar.hidden = false;

            yConstraint.constant = 47;

            self.view.layoutIfNeeded();
        }
        else
        {
            isSearching = false;

            searchBar.hidden = true;

            tableView.reloadData();

            yConstraint.constant = 3;

            self.view.layoutIfNeeded();

            self.view.endEditing(true);
        }

    }


    func searchMethod(notification:NSNotification)
    {
        if(isSearching == true)
        {
            isSearching = false;

            searchBar.hidden = true;

            tableView.reloadData();

            yConstraint.constant = 3;

            self.view.layoutIfNeeded();

            self.view.endEditing(true);
        }
        else
        {
            isSearching = true;

            searchBar.hidden = false;

            yConstraint.constant = 47;

            self.view.layoutIfNeeded();
        }

    }


    // MARK:
    // MARK: SearchBar Method

    func searchBar(searchBar: UISearchBar, textDidChange searchText: String)
    {

        arrSearch = [];

        for(var i=0;i<arrDict.count;i++)
        {
            if((BusinessData.objectAtIndex(i).objectForKey("name")?.lowercaseString?.containsString(searchText.lowercaseString)) == true)
            {
                arrSearch.addObject(BusinessData.objectAtIndex(i));
            }
        }

        tableView.reloadData();
    }

    func searchBarSearchButtonClicked(searchBar: UISearchBar)
    {
        self.view.endEditing(true);

        isSearching = false;

        searchBar.hidden = true;

        tableView.reloadData();

        yConstraint.constant = 3;

        self.view.layoutIfNeeded();
    }




}

我在这些按钮操作方法中遇到错误:

@IBAction func sortByAZBtnPress(sender: AnyObject)
    {
        RightMenu.hidden = true



        BusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in

            if let name1 = dict1["business_name"] as? String, name2 = dict2["business_name"] as? String
            {
                return name1.compare(name2)
            }

            return .OrderedAscending
        }
        self.tableView.reloadData()
    }

    @IBAction func sortByRatingBtnPress(sender: AnyObject)
    {

        RightMenu.hidden = true

        BusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in

            if let name1 = dict1["rating"] as? String, name2 = dict2["rating"] as? String
            {
                return name2.compare(name1)
            }

            return .OrderedDescending
        }
        self.tableView.reloadData()


    }


    @IBAction func sortByRecentBtnPress(sender: AnyObject)
    {

        RightMenu.hidden = true

        BusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in

            if let name1 = dict1["created_at"] as? String, name2 = dict2["created_at"] as? String
            {
                return name2.compare(name1)
            }

            return .OrderedDescending
        }
        self.tableView.reloadData()
    }

在每种方法中,我都会收到此错误类型“BusinessData”没有成员“sortUsingComparator”..在以下行中:

BusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in

请帮帮我

谢谢

最佳答案

BusinessData 是一个模型类。看起来您真正想做的是对 var arrDict = [BusinessData]() - 一个 BusinessData 实例数组进行排序。

您当前的代码 BusinessData.sortUsingComparator { (dict1, dict2) -> NSComparisonResult in 正在尝试调用 BusinessData 上的类方法 sortUsingComparator模型类并期望拿回 2 个字典。

你想要的更像是:

arrDict.sortUsingComparator { (b1, b2) -> NSComparisonResult in

其中 b1b2BusinessData 的实例,而不是字典。

关于ios - 类型 'BusinessData' 没有成员 'sortUsingComparator',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36329562/

相关文章:

ios - 如果我们在真正的预提交处理程序中,由于 CA 限制,我们实际上不能添加任何新的栅栏

swift - 在 Swift 中设置两周时间表

ios - 在 IOS 13 的 Swift 5 中更改 tabBar 高度

ios - 在 iOS 中从 HTML 文件中查找嵌入的 Flash 内容

ios - UIWindow 正在重置我的 uiview

ios - 当应用程序进入后台时,如何在 SpriteKit 中正确暂停?

ios - 导航栏颜色困惑

bash - 使用 Bash 的两个列表之间的区别

倒排索引搜索算法

r - 如何使用第二个向量作为平局断路器对向量进行排名?