Swift 4.1 NSMutableArray 和 index(of:) 的意外结果

Swift 4.1 unexpected result with NSMutableArray and index(of:)

我有一个名为 Item 的对象的 NSMutableArray。 我需要能够在给定项目本身的数组中获取项目的索引。

import UIKit
import Foundation

struct Item {
    var name: String
    var message: String
}

var itemsArray = NSMutableArray()

let item = Item (name: "name", message: "mex")
let item2 = Item (name: "name2", message: "mex2")

var items : [Item] = [item, item2]

itemsArray.addObjects(from: items)

itemsArray.index(of: item)

最后一行的结果是 9223372036854775807

我错过了什么?

编辑:我正在学习 UIPageViewController 的教程,其中需要 NSMutableArray 才能获取项目的索引

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {

if let currentPageViewController = viewController as? SinglePageViewController, let currentItem:Item = currentPageViewController.item {

    let currentIndex = itemsArray.index(of: currentItem)
    return viewControllerAtIndex(index: currentIndex - 1)
}
return nil
}

取自https://grokswift.com/pageviewcontroller/

edit2:抱歉,我不想让大家不高兴,实际上我只是在学习 PageViewController,它根据从 JSon 获取的数据实例化动态数字页面。 我不认为遵循该教程会很糟糕。 如果你能提供一些更好的东西(我知道它不是真正的主题)那将会很有帮助

首先——正如多次提到的——根本不要在 Swift 中使用 NSMutable... 集合类型。

为了能够使用 index(of 结构必须采用 Equatable

in Swift 4.1 根据SE-0185 Synthesizing Equatable and Hashable conformance == 运算符是通过采用Equatable.

合成的
struct Item : Equatable
{
    var name: String
    var message: String
}

let item = Item (name: "name", message: "mex")
let item2 = Item (name: "name2", message: "mex2")

var items = [item, item2]

items.index(of: item) // 0