如果在Ray Wenderlich处发现了此堆栈数据结构,并且效果很好:
public struct Stack<T> {
fileprivate var array = [T]()
public var isEmpty: Bool {
return array.isEmpty
}
public var count: Int {
return array.count
}
public mutating func push(_ element: T) {
array.append(element)
}
public mutating func pop() -> T? {
return array.popLast()
}
public var top: T? {
return array.last
}
}
我想添加另一种在堆栈中查找元素的方法,以便我不会尝试多次添加元素。例如,我要保留一堆ViewController。
var vcStack = Stack<UIViewController>()
vcStack.push(VC1)
vcStack.push(VC2)
如果输入的VC存在(或不存在),我希望能够查询Stack并返回一个布尔值,如下所示:
if vcStack.hasElement(VC1) {
//do something
}
这是伪代码-Swift 4代码是什么?
public var hasElement(_ element: T): -> Bool {
if array.contains(element){
return true
}else{
return false
}
}
答案 0 :(得分:2)
如果您将Stack
类定义为要求其元素符合Equatable
:
public struct Stack<T> where T: Equatable {
那么您的hasElement
将是:
public func hasElement(_ element: T) -> Bool {
return array.contains(element)
}
或者您可以将Stack
声明为已保留,然后将hasElement
添加到扩展名:
public extension Stack where T: Equatable {
public func hasElement(_ element: T) -> Bool {
return array.contains(element)
}
}
这使您必须拥有一堆东西,但hasElement
函数只有在Stack
个值Equatable
中才可用。
答案 1 :(得分:0)
struct MenuData { 让标题:字符串! 让imageName:字符串! }
MoreTV类:UITableView {
var aryMenu : [MenuData] = [MenuData(title: "My Profile".localized, imageName: "ic-user"),]
}