简体   繁体   中英

.IsEmpty returns False

I am using the following code to check if the array is empty and then return 0 number of rows for tableview to avoid the crash. But even when the array is empty it is not returning 0 row count and enters the else part which it is not supposed to do. Hence my application crashes with an index out of range exception.

I have tried putting two checks using count and isEmpty but it still enters the else part even when the array is empty.

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    if HomeVC.categoryDetail.count == 0{
        return 0
    }else{
        if(HomeVC.categoryDetail.isEmpty)
        {
            return 0
        }
        else
        {
            return HomeVC.categoryDetail.count + 3 as Int
        }
    }
}

I want to ensure that it won't enter the else part when the array has no value.

You wont. Actually you never reach HomeVC.categoryDetail.isEmpty because you checked HomeVC.categoryDetail.count == 0 earlier.

Note 1 : Generally .isEmpty is much more performant than getting .count . Because there is no need to count items when you can check only the last index.

Count Complexity: O(1) if the collection conforms to RandomAccessCollection; otherwise, O(n), where n is the length of the collection. - Source

Note 2 : There is no need to cast count to Int . Because it can be done automatically from UInt to Int . And count is returning as Int Already.

Note 3 : Use ? : ? : for one line two conditions situations. It will prevent you from extra codes and undefined states.

So the code would be:

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return HomeVC.categoryDetail.isEmpty ? 0 : HomeVC.categoryDetail.count + 3
}

Note 4 : Try print(HomeVC.categoryDetail) before return to see what is inside when you expect to be empty and it's not.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM