如何索引字符串? - 斯威夫特3

时间:2017-03-15 03:04:10

标签: swift

我是新手,需要你的帮助。任何人都可以告诉我如何更改此代码,以便它生成一个字符串数组而不是一个整数数组。感谢您的时间和任何可能提供的帮助。

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var objTable: UITableView!

    var numberArray = NSMutableArray()
    var selectedArray=NSMutableArray()

    override func viewDidLoad() {
        super.viewDidLoad()

        for index in 1...200 {
            numberArray.add(index)
        }
    }

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

    func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell
    {
        let contact = numberArray.object(at: indexPath.row)
        let cell:MyCustomClass = objTable.dequeueReusableCell(withIdentifier: "reuseCell") as! MyCustomClass

        cell.textLabel?.text = String("Number \(contact)")

        cell.tickButton.addTarget(self, action:#selector(ViewController.tickClicked(_:)), for: .touchUpInside)

        cell.tickButton.tag=indexPath.row

        if selectedArray .contains(numberArray.object(at: indexPath.row)) {
            cell.tickButton.setBackgroundImage(UIImage(named:"Select.png"), for: UIControlState())
        }
        else
        {
            cell.tickButton.setBackgroundImage(UIImage(named:"Diselect.png"), for: UIControlState())
        }
        return cell
    }

    func tickClicked(_ sender: UIButton!)
    {
        let value = sender.tag;

        if selectedArray.contains(numberArray.object(at: value))
        {
            selectedArray.remove(numberArray.object(at: value))
        }
        else
        {
            selectedArray.add(numberArray.object(at: value))
        }

        print("Selected Array \(selectedArray)")

    objTable.reloadData()

    }

    func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: IndexPath) ->CGFloat
    {
        return 80.0
    }


}

2 个答案:

答案 0 :(得分:1)

试一试:

 let stringArray: [String] = (1...200).map {"Number " +  String(format: "%d", $0)}

然后删除此行:

let contact = numberArray.object(at: indexPath.row)

并更改此行:

cell.textLabel?.text = String("Number \(contact)")

要:

cell.textLabel?.text = stringArray[indexPath.row]

更新

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var objTable: UITableView!

//    var numberArray = NSMutableArray()

    let stringArray: [String] = (1...200).map {"Number " +  String(format: "%d", $0)}

    var selectedArray=NSMutableArray()

    override func viewDidLoad() {
        super.viewDidLoad()

//        for index in 1...200 {
//            numberArray.add(index)
//        }
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
//        return numberArray.count;
        return stringArray.count;
    }

    func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell
    {
//        let contact = numberArray.object(at: indexPath.row)
        let cell:MyCustomClass = objTable.dequeueReusableCell(withIdentifier: "reuseCell") as! MyCustomClass

//        cell.textLabel?.text = String("Number \(contact)")
        cell.textLabel?.text = stringArray[indexPath.row]

        cell.tickButton.addTarget(self, action:#selector(ViewController.tickClicked(_:)), for: .touchUpInside)

        cell.tickButton.tag = indexPath.row

        if selectedArray .contains(stringArray[indexPath.row]) {
            cell.tickButton.setBackgroundImage(UIImage(named:"Select.png"), for: UIControlState())
        }
        else
        {
            cell.tickButton.setBackgroundImage(UIImage(named:"Diselect.png"), for: UIControlState())
        }
        return cell
    }

    func tickClicked(_ sender: UIButton!)
    {
        let value = sender.tag;

        if selectedArray.contains(stringArray[value])
        {
            selectedArray.remove(stringArray[value])
        }
        else
        {
            selectedArray.add(stringArray[value])
        }

        print("Selected Array \(selectedArray)")

        objTable.reloadData()

    }

    func tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: IndexPath) ->CGFloat
    {
        return 80.0
    }


}

答案 1 :(得分:1)

如果您不熟悉地图功能等高阶函数,可以像这样使用for循环......

var numberArray = [String]()

        for index in 1...200 {
            numberArray.append(String(index))
        }

这种方法的结论是numberArray是可变的,因为它是一个var,你应该避免在大多数情况下的可变性。

这是正确的方法,您可以看到,使用此numberArray是常量,我们不再更改其状态。

let numberArray = Array(1...200).map{String($0)}