- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在不同类的数组中寻找特定类的实例(在 TabBarViewController 中寻找特定 ViewController 的索引)
我有一个使用 type(of:) 检查类型的代码,但它不起作用:
func getTabIndex(_ rootClass: AnyClass) -> Int? {
if let tabVC = UIApplication.shared.delegate?.window?!.rootViewController as? UITabBarController {
for (index, vc) in tabVC.viewControllers!.enumerated() {
if type(of: vc) == rootClass {
return index
}
}
}
return nil
}
if type(of: vc) == rootClass
总是返回 false。
当我将 if type(of: vc) == rootClass
更改为 vc.isMember(of: rootClass)
时,它工作正常。
我假设 isMember(of:) 是 obj-c 方法,而 type(of:) 是纯粹的 swift,但我不明白为什么它会对 UIViewController 产生影响。
有人可以解释为什么 type(of: ) 在这种情况下不起作用吗?在这两种情况下,我都在比较确切的类型,而不是子类。 TabBar 有 FooViewController 和 BarViewController 的实例。当我调用 getTabIndex(FooViewController.self)
时,使用 type(of:) 时得到 nil,使用 isMember(of:) 时得到 0
编辑:我知道 tpye(of:) 检查确切类型,而 kind(of:) 检查子类,但在我的例子中,我检查的是确切类型,所以 type(of:) 应该工作正常,因此困惑.
当我打印 type(of: ) 的结果时,它与我打印 rootClass 的值时完全相同。我知道这仅意味着它们的文本表示相同而底层类型可能不同,但我不明白为什么会这样
编辑 2:
原始问题使用了 isKind(of:) 方法,这是一种误导,我将其更改为 isMember(of:) 以更准确地反射(reflect)我的困惑来源,这就是为什么 type(of:) 在比较确切类型时不起作用
最佳答案
用法:type(of: instance) == CheckingType.self
当 instance
正好是 CheckingType
时,仅返回真值
此方法来自愚蠢的 Objective-C,需要 NSObjectProtocol
快速使用 instance is CheckingType
用法:instance.isKind(of: CheckingType.self)
当 instance
为 CheckingType
或继承自 CheckingType
时返回 true
isKind(of:)
的 Swift 版本
用法:实例是CheckingType
当 instance
为 CheckingType
或继承自 CheckingType
时返回 true
import Foundation
class Animal: NSObject { }
class Cat: Animal { }
Cat() is Cat // true
Cat() is Animal // true
Cat().isKind(of: Animal.self) // true
Cat().isKind(of: Cat.self) // true
type(of: Cat()) == Animal.self // false
type(of: Cat()) == Cat.self // true
关于swift - 使用 type(of : ) and isMember(of: )) 的比较之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45463617/
以下命令返回 1: ismember(-0.6, -1:.1:.9) 但下一个命令返回 0: ismember(-0.1, -1:.1:.9) 即使 -0.1 显然在 -1:.1:.9 中。 有人知道
我正在编写一个程序来测试字符串数组中是否存在字符串。我做了一个简单的函数来做到这一点: bool isMemberOfArrayStr(std::string str, std::string arr
opencv中matlab的ismember相当于什么? 我正在尝试将 matlab 代码转换为 opencv ( C/CPP )。为此,我需要将以下步骤转换为 Opencv。有人可以在这方面指导我吗
基于此XPages adding @Formulas in dialogList , 我的 dialogList1从两个连接的 View 中获取值:a和 b . 还有一个dialogList2 ,这取
isMember:: a -> [a] -> Bool isMember y [] = False isMember y (x:xs) = if y == x then True else
我需要创建一个名为 isMemeber 的递归 boolean 方法。该方法应该只接受两个参数:一个数组和一个值。如果在数组中找到该值,该方法应返回 true;如果在数组中未找到该值,则该方法应返回
假设我有两个数组: A:14 63 13 38 44 23 11 12 13 38 44 23 B:38 44 23 我正在尝试使用 ismembe
这是 ismember 的示例之一中描述的内容: Define two vectors with values in common. A = [5 3 4 2]; B = [2 4 4 4 6 8];
比如A是数字集合,b是元素。 我想测试b中的数是否是集合A的元素。 我知道 matlab 函数“ismember”可以做到这一点,但是当我使用它一百万次时它还不够快。 b=[1,2,9,100]; A
CriteriaBuilder 重载方法 isMember(...) 创建一个谓词来测试元素是否是集合的成员。 > Predicate isMember(E elem, Expression coll
我需要代码的这一部分更快地运行,因为它被多次调用。我是Matlab的新手,我觉得好像必须有一种方法来回去并不是那么简单。您可以提供任何有关如何提高我所拥有的速度或其他功能以帮助我执行此任务的帮助,我们
#include int isMember(); float calculatePrice(int,int,int); void printPlayer(); char name[4][100];
我试图在不同类的数组中寻找特定类的实例(在 TabBarViewController 中寻找特定 ViewController 的索引) 我有一个使用 type(of:) 检查类型的代码,但它不起作用
好吧,我正在尝试做一些很奇怪的事情。我正在尝试使用 CriteriaBuilder 和 CriteriaQuery 返回实体集合中包含给定对象的所有实体。我已经为此绞尽脑汁好几个小时了,相关文档很少而
我试图在 MATLAB 中执行逐行“ismember”,以便找出 Set 中 Input 的每个元素所在的位置。这是我到目前为止的工作。 function lia = ismemberrow(Inpu
如果我这样做 ismember([NaN 0 3 2],[0 NaN]) 那么输出是 0 1 0 0 我显然期望的地方 1 1 0 0 我试过了 ism
给定以下实体,如何构造 JPA 谓词以仅选择那些在其类别集中具有给定 ID 的类别的项目? @Entity public class Item { @Id private String id;
我在 Matlab 中使用 ismember 来查找向量 A 中不包含在向量 idx 中的整数。我想知道我是否可以使用更快的东西。 关于我的问题,我找到了 this answer但它在这里似乎不起作用
我有两个单元格,第一列作为字符串。我目前正在使用 ismember 来匹配两个单元格中的第一列元素。但 ismember 区分大小写。我无法使用 strcmpi 因为单元格大小不等。您能建议另一种方法
我在 Matlab 中使用 ismember 来查找向量 A 中不包含在向量 idx 中的整数。我想知道我是否可以使用更快的东西。 关于我的问题,我找到了 this answer但它在这里似乎不起作用
我是一名优秀的程序员,十分优秀!