如何使用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
答案 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)
}
}
}