在tableView中显示数组

时间:2019-01-11 18:16:52

标签: ios arrays swift uitableview

当前正在开发一个应用程序,该应用程序具有现有数组(在单独的.swift文件中)的所有项目的列表。这是通过tableView完成的。但是,每次我只会得到一个空的tableview。知道出什么问题了吗?

import UIKit
import MapKit

//Initialize the TableViewController
class CategoriesController: UIViewController, UITableViewDataSource, UITableViewDelegate {

//Retrieve the array
var locationsAll = [Location]()

//Outlet
@IBOutlet var tableView: UITableView!

//Load view
override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self
}

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

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return locationsAll.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "allCell") ?? UITableViewCell(style: .subtitle, reuseIdentifier: "allCell")

    let location = locationsAll[indexPath.row]
    cell.textLabel?.text = location.title
    cell.detailTextLabel?.text = location.rating

    return cell
    } 
}

对于数组,我使用了一个结构。该结构也会在MKMapView上调用。

struct Location {
    let title: String
    let rating: String
    let description: String
    let latitude: Double
    let longitude: Double
}

包含结构和数据的.swift文件:

struct Location {
        let title: String
        let rating: String
        let description: String
        let latitude: Double
        let longitude: Double
    }

let locations = [
    Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111),
        Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111),
        Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111)
]

我使用var locationsAll = [Location]()在文件中称呼它 预先谢谢你!

3 个答案:

答案 0 :(得分:1)

那么你需要

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return locations.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "allCell") ?? UITableViewCell(style: .subtitle, reuseIdentifier: "allCell")

    let location = locations[indexPath.row]
    cell.textLabel?.text = location.title
    cell.detailTextLabel?.text = location.rating

    return cell
    } 
}

let locations = [似乎是全局变量,因此可以在任何地方访问,也可以声明

var locationsAll = [Location]()

然后在viewDidLoad

locationsAll  = locations 

答案 1 :(得分:1)

不建议使用全局数组作为数据源。数据应该封装在结构,类或枚举中。

您可以在控制器内部创建位置。

替换

var locationsAll = [Location]()

使用

var locationsAll = [
    Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111),
    Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111),
    Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111)
]

或在结构中将位置声明为 static 变量

struct Location {
    let title: String
    let rating: String
    let description: String
    let latitude: Double
    let longitude: Double

    static let locations = [
        Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111),
        Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111),
        Location(title: "something", rating: "", description: "Old.", latitude: 10.11111, longitude: 1.11111)
    ]
}

并填充数据源数组

var locationsAll = Location.locations

答案 2 :(得分:0)

计数将等于0。这就是为什么不渲染任何单元格的原因。添加数据后,您需要在表视图上使用relodData。

我假设您在情节提要中设置了单元?否则,您需要在使用之前注册该单元格。