web-dev-qa-db-ja.com

NSIndexPath in Swift

うまくいけば、クラスNSIndexPathが配列を持つ配列を処理することを知っています。

私はこのコードを持っています:

import UIKit

class ViewController: UIViewController, UITableViewDataSource {

    let devCourses = [
        ("iOS App Dev with Swift Essential Training","Simon Allardice"),
        ("iOS 8 SDK New Features","Lee Brimelow"),
        ("Data Visualization with D3.js","Ray Villalobos"),
        ("Swift Essential Training","Simon Allardice"),
        ("Up and Running with AngularJS","Ray Villalobos"),
        ("MySQL Essential Training","Bill Weinman"),
        ("Building Adaptive Android Apps with Fragments","David Gassner"),
        ("Advanced Unity 3D Game Programming","Michael House"),
        ("Up and Running with Ubuntu Desktop Linux","Scott Simpson"),
        ("Up and Running with C","Dan Gookin") ]

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

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

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        var cell = UITableViewCell()

        let (courseTitle, courseAuthor) = devCourses[indexPath.row]
        cell.textLabel?.text = courseTitle

        return cell
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

NSIndexPathがどのように機能するのか理解できません。ドキュメンテーションを読みましたが、これがどのように機能するかを学習するこの時点で理解するのはまだ困難です。 NSIndexPathに行のプロパティがあることをどのようにして知ることができますか?誰かがこの行のすべての部分を説明できますか?

let (courseTitle, courseAuthor) = devCourses[indexPath.row]

NSIndexPathは、この定数のcourseTitleがインデックス番号0を参照し、配列インデックス0を参照していることをどのようにして知っていますか("iOS App Dev with Swift Essential Training","Simon Allardice")

8
Antonija

少しトピックから外れていますが、「プリミティブ」タイプではなく、モデルにカスタムクラスを使用することを皆さんに奨励したいと思います。少しの努力がありますが、大きなメリットがあります。

2つのプロパティと説明を持つ単純なクラス(説明変数はデバッグ中に役立ちます)

class DevCourse : Printable {

  var author : String
  var title : String

  init(author : String, title : String) {
    self.author = author
    self.title = title
  }

  var description : String { return "DevCourse \(title) by \(author)"}
}

devCourses配列を簡単にマップして、1行でDevCourseインスタンスを作成できます

  let rawDevCourses = [
    ("iOS App Dev with Swift Essential Training","Simon Allardice"),
    ("iOS 8 SDK New Features","Lee Brimelow"),
    ("Data Visualization with D3.js","Ray Villalobos"),
    ("Swift Essential Training","Simon Allardice"),
    ("Up and Running with AngularJS","Ray Villalobos"),
    ("MySQL Essential Training","Bill Weinman"),
    ("Building Adaptive Android Apps with Fragments","David Gassner"),
    ("Advanced Unity 3D Game Programming","Michael House"),
    ("Up and Running with Ubuntu Desktop Linux","Scott Simpson"),
    ("Up and Running with C","Dan Gookin") ]

let devCourses = rawDevCourses.map { DevCourse(author: $0.1, title: $0.0) }

プロパティを適用するための線がはるかにはっきり見える

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("MyIdentifier", forIndexPath: indexPath) as! UITableViewCell

    let course = devCourses[indexPath.row]
    cell.textLabel?.text = course.title

    return cell
}
6
vadian