有什么办法可以使它进入forloop吗?

时间:2019-11-14 01:51:42

标签: ios arrays swift loops

如何使用for循环打印范围内的名称列表?我不想使用数组并一张一张地打印它们,因为当数据变大时这并不理想。请帮忙吗?

这是我的代码的一部分。

        let developer = Developers(dvName: "Developer 0", dvHP: "Phone Number: #0")
        developerArray.append(developer)

        let developer1 = Developers(dvName: "Developer 1", dvHP: "Phone Number: #1")
        developerArray.append(developer1)

        let developer2 = Developers(dvName: "Developer 2", dvHP: "Phone Number: #2")
        developerArray.append(developer2)

        let developer3 = Developers(dvName: "Developer 3", dvHP: "Phone Number: #3")
        developerArray.append(developer3)

更新: 这是我的ViewController代码。

import UIKit


class Developers {
    let developerName: String
    var developerEmail: String?
    var developerBalance: Float?
    let developerHP: String

    init(dvName: String, dvHP: String) {
        self.developerName = dvName
        self.developerHP = dvHP
    }

    func showDeveloper() {
        print("\(dvName)")
        print("\(dvHP)")
    }
}
class ViewController: UIViewController, UITableViewDelegate,  UITableViewDataSource {

    @IBOutlet weak var myTableView: UITableView!

   var developerArray = [Developers]()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        var developers: [Developers] = []

        for i in 0...3 {
            developers.append(Developers(dvName: "Developer \(i))", dvHP: "Phone Number #\(i)"))
        }

        for i in 1...2 {
            developers[i].showDeveloper()
        }

        myTableView.dataSource = self
        myTableView.delegate = self

    }

    //MARK:- UITableView methods

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

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCell(withIdentifier: "MyCell")
        if cell == nil {

            cell = UITableViewCell(style: .subtitle, reuseIdentifier: "MyCell")
        }

        cell?.textLabel?.text = developerArray[indexPath.row].developerName
        cell?.detailTextLabel?.text = developerArray[indexPath.row].developerHP

            return cell!
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let destination = storyboard.instantiateViewController(withIdentifier: "DetailVC") as! DetailVC
        destination.titleStringViaSegue = developerArray[indexPath.row].developerName

        //Display navigation controller title
        self.navigationController?.pushViewController(destination, animated: true)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let destination = segue.destination as? DetailVC {
            destination.developer = developerArray[(myTableView.indexPathForSelectedRow?.row)!]

            //Deselection of row when returning to previous screen
            myTableView.deselectRow(at: myTableView.indexPathForSelectedRow!, animated: true)
        }

    }

}

因为我也在使用UITableView,所以我想知道是否有任何相关的东西吗?

这是我的预期输出Screenshot Here

2 个答案:

答案 0 :(得分:0)

这是您的主意吗?

class Developer {
    let dvName: String
    let dvHp: String
    init(dvName: String, dvHp: String) {
        self.dvName = dvName
        self.dvHp = dvHp
    }

    func showDeveloper() {
        print("I am \(dvName) and my id is \(dvHp)")
    }
}

var developers: [Developer] = []

for i in 0...3 {
    developers.append(Developer(dvName: "Developer \(i)", dvHp: "Phone Number: #\(i)"))
}

for i in 1...2 {
    developers[i].showDeveloper()
}

这将为您提供输出:

  

我是Developer 1,我的ID是电话号码:#1
  我是Developer 2,我的ID是电话号码:#2


检查是否可以提供所需的输出。

1)您的类变量被命名为developerName,developerHP而不是dvName,dvHP。这些是你的论点。

2)要从numberOfRowsInSection访问开发人员对象的数组,您需要在viewDidLoad之外定义该数组。

import UIKit


class Developers {
    let developerName: String
    var developerEmail: String?
    var developerBalance: Float?
    let developerHP: String

    init(dvName: String, dvHP: String) {
        self.developerName = dvName
        self.developerHP = dvHP
    }

    func showDeveloper() {
        print("\(developerName)")
        print("\(developerHP)")
    }
}
class ViewController: UIViewController, UITableViewDelegate,  UITableViewDataSource {

    @IBOutlet weak var myTableView: UITableView!

    var developerArray = [Developers]()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.


        for i in 0...3 {
            developerArray.append(Developers(dvName: "Developer \(i))", dvHP: "Phone Number #\(i)"))
        }

        for i in 1...2 {
            developerArray[i].showDeveloper()
        }

        myTableView.dataSource = self
        myTableView.delegate = self

    }

    //MARK:- UITableView methods

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

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var cell = tableView.dequeueReusableCell(withIdentifier: "MyCell")
        if cell == nil {

            cell = UITableViewCell(style: .subtitle, reuseIdentifier: "MyCell")
        }

        cell?.textLabel?.text = developerArray[indexPath.row].developerName
        cell?.detailTextLabel?.text = developerArray[indexPath.row].developerHP

        return cell!
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let destination = storyboard.instantiateViewController(withIdentifier: "DetailVC") as! DetailVC
        destination.titleStringViaSegue = developerArray[indexPath.row].developerName

        //Display navigation controller title
        self.navigationController?.pushViewController(destination, animated: true)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let destination = segue.destination as? DetailVC {
            destination.developer = developerArray[(myTableView.indexPathForSelectedRow?.row)!]

            //Deselection of row when returning to previous screen
            myTableView.deselectRow(at: myTableView.indexPathForSelectedRow!, animated: true)
        }

    }

}

答案 1 :(得分:0)

如果您真的想要如屏幕截图所示的输出,我认为您可以通过制作Developers类,添加循环并使用developerArray来做额外的工作。可以通过下面的代码简单地实现(只需注意cellForRowAt dataSource方法中的代码)

请注意,如果您打算添加不同的开发人员姓名和他们的电话号码,则既接受的答案以及我的答案都将无效。

import UIKit

class ViewController: UIViewController, UITableViewDelegate,  UITableViewDataSource {

@IBOutlet weak var myTableView: UITableView!


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.



    myTableView.dataSource = self
    myTableView.delegate = self

}

//MARK:- UITableView methods

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

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 10// number of data required
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCell(withIdentifier: "MyCell")
    if cell == nil {

        cell = UITableViewCell(style: .subtitle, reuseIdentifier: "MyCell")
    }

    cell?.textLabel?.text = "Developer \(indexPath.row)"
    cell?.detailTextLabel?.text = "Phone Number: #\(indexPath.row)"

    return cell!
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let destination = storyboard.instantiateViewController(withIdentifier: "DetailVC") as! DetailVC
    destination.titleStringViaSegue = "Developer \(indexPath.row)"

    //Display navigation controller title
    self.navigationController?.pushViewController(destination, animated: true)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? DetailVC {
        destination.developer = "Developer \(myTableView.indexPathForSelectedRow!.row))"

        //Deselection of row when returning to previous screen
        myTableView.deselectRow(at: myTableView.indexPathForSelectedRow!, animated: true)
    }

}

}