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
我有一个名为 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