Ios java的等价物是什么;斯威夫特在哪?

Ios java的等价物是什么;斯威夫特在哪?,ios,swift,objective-c,Ios,Swift,Objective C,就像java的instanceOf关键字一样,Swift中的等价物是什么 java示例: A a = new A(); boolean isInstanceOfA = a instanceof A; 这是一个事实 因此,我需要在SwiftisKindOfClass()方法中使用类似的东西,从NSObjectProtocol来看,它相当于java的instanceof关键字,在java中,它是一个关键字,但在Swift中,它是一个协议方法,但它们的行为类似,并且在类似的上下文中使用 isKind

就像java的instanceOf关键字一样,Swift中的等价物是什么

java示例:

A a = new A();
boolean isInstanceOfA = a instanceof A;
这是一个事实

因此,我需要在Swift

isKindOfClass()
方法中使用类似的东西,从NSObjectProtocol来看,它相当于java的instanceof关键字,在java中,它是一个关键字,但在Swift中,它是一个协议方法,但它们的行为类似,并且在类似的上下文中使用

isKindOfClass:
如果接收方是 指定的类或从 指定的类

这正是instanceof关键字在Java中的作用

例如:

let a: A = A()
let isInstanceOfA: Bool = a.isKindOfClass(A) // returns true.
您还可以使用
is
关键字

let a: A = A()
let isInstanceOfA: Bool = a is A
区别在于:

  • is
    适用于Swift中的任何类,而
    isKindOfClass()
    仅适用于属于
    NSObject
    的子类或以其他方式实现
    NSObjectProtocol
    的类


  • is
    采用必须在编译时硬编码的类型
    isKindOfClass:
    接受一个表达式,该表达式的值可以在运行时计算

因此,no
is
关键字不像
instanceof

那样工作,它的
是类的一种:[ClassName class]

let a = A()
let isInstanceOfA = a is A

它的
是类的一种(Classname.class())
对于swift3swift4它是:

if someInstance is SomeClass {
    ...
}
func getOrElse<T>(defaultVal:T) -> T {
    if let selfVal = self, selfVal is T {
        return selfVal as! T
    } else {
        return defaultVal
    }
}
如果您的类正在扩展
NSObject
,您还可以使用:

if someInstance.isKind(of: SomeClass.self) {
    ...
}

对于Swift 4.x,它是:

if someInstance is SomeClass {
    ...
}
func getOrElse<T>(defaultVal:T) -> T {
    if let selfVal = self, selfVal is T {
        return selfVal as! T
    } else {
        return defaultVal
    }
}
func getOrElse(defaultVal:T)->T{
如果让selfVal=self,selfVal为T{
将selfVal返回为!T
}否则{
返回默认值
}
}
非常短的变体(根据建议@Sulthan):

扩展名可选{
func getOrElse(defaultVal:T)->T{
返回(自身为?T)??默认值
}
}

try operator“is”:a是一个蠕虫,我在其中一个stackoverflow聊天室找到了答案,或者如果这个问题已经有答案,我应该删除它,一个类似问题的链接就很好了。你可以使用
is
操作符这里可以找到一个例子:然后这就引出了一个问题
isKindOfClass
方法和
is
关键字
is
采用编译时必须硬编码的类型有什么区别
isKindOfClass:
接受一个表达式,该表达式的值可以在运行时计算。好吧,在任何情况下都不需要isKindOfClass。我强烈建议修改答案,以明确
is
将是首选用法。@PEEJWEEJ这里的目的是提供所有可用选项以及它的具体功能,从而给出一个“完整”的答案。是的,这很好,但是考虑到它是Objective-C而不是Swift,因此在任何不包括Objective-C运行时的平台上都不可用,isKindOfClass是一个平台特定的替代品,而不是Swift等效物。这实际上在Swift 1.0中有效。您知道,使用
(self as?T)更容易实现吗??defaultVal
?与Java不同,在Swift中,选项是一种本机类型,并且有语言运算符可以使用它们。这就是为什么您很少需要在Optional上定义新方法的原因——必要的函数性已经存在了。