- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一堆 UIView 类。有些符合特定的协议(protocol)。我有一个包含这些特定数组的数组,但我无法在此数组上调用 index(of:)(此代码可以粘贴到 Playground 中):
import UIKit
protocol ViewWithColor {}
class BlackView: UIView {}
class WhiteView: UIView {}
class BlueView: UIView, ViewWithColor {}
class GreenView: UIView, ViewWithColor {}
class YellowView: UIView, ViewWithColor {}
let blackView = BlackView()
let whiteView = WhiteView()
let blueView = BlueView()
let greenView = GreenView()
let yellowView = YellowView()
let allViews = [blackView, whiteView, blueView, greenView, yellowView]
let viewsWithColorArray: [ViewWithColor] = [blueView, greenView, yellowView]
let index1 = allViews.index(of: blueView)
let index2 = viewsWithColorArray.index(of: blueView)
错误是:
cannot invoke 'index' with an argument list of type '(of: BlueView)'
无法调用该函数,因为协议(protocol) ViewWithColor 不符合 Equatable
。我真的必须实现 equatable 吗?或者有更好的方法吗?
最佳答案
正如@vadian 所说,您可以使用带有闭包的index
版本。在这种情况下,您要查找特定实例,因此请使用 index(where: { $0 === blueView })
。
===
运算符:
Returns a Boolean value indicating whether two references point to the same object instance.
此外,您需要使协议(protocol) ViewWithColor
成为 class
协议(protocol),因为 ===
仅适用于类实例。
protocol ViewWithColor: class {}
class BlackView: UIView {}
class WhiteView: UIView {}
class BlueView: UIView, ViewWithColor {}
class GreenView: UIView, ViewWithColor {}
class YellowView: UIView, ViewWithColor {}
let blackView = BlackView()
let whiteView = WhiteView()
let blueView = BlueView()
let greenView = GreenView()
let yellowView = YellowView()
let allViews = [blackView, whiteView, blueView, greenView, yellowView]
let viewsWithColorArray: [ViewWithColor] = [blueView, greenView, yellowView]
let index1 = allViews.index(where: { $0 === blueView })
print(index1 ?? -1)
2
let index2 = viewsWithColorArray.index(where: { $0 === blueView })
print(index2 ?? -1)
0
关于ios - 如何使用索引(:) with [SomeProtocol]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42830422/
我有一些名为 SomeProtocol 的协议(protocol)以及一些符合它的结构 struct myStruct1: SomeProtocol {} struct myStruct2: Some
假设我有两个协议(protocol): @protocol A @end 和 @protocol B // Protocol B conforms to protocol A. @end 还有两个变
我有一堆 UIView 类。有些符合特定的协议(protocol)。我有一个包含这些特定数组的数组,但我无法在此数组上调用 index(of:)(此代码可以粘贴到 Playground 中): imp
我有一个名为 subscribers 的数组,它存储符合 JABPanelChangeSubscriber 协议(protocol)的对象。协议(protocol)声明为 public protoco
我习惯于看到类似 id myVar 的东西或 MyObject myVar ,我们在这里声明所讨论的变量可以愉快地拥有 NSCopying在没有编译器抛出不稳定的情况下调用它的方法。 但我最近发现了一
我有一个通过主键获取数据库对象的协议(protocol) typealias PrimaryKey = String protocol PrimaryKeyConvertible { var
这里有一些设置代码来解释正在发生的事情: protocol CanJump{ func jump() } struct Dog: CanJump{ func jump(){
我目前正在一个以 Objective-C 为主的项目中编写一些 Swift 代码。在我们的 ObjC 代码中,我们有一个 header 声明 typedef GPUImageOutput MyFilt
我是一名优秀的程序员,十分优秀!