Ios java的等价物是什么;斯威夫特在哪?
就像java的instanceOf关键字一样,Swift中的等价物是什么 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
A a = new A();
boolean isInstanceOfA = a instanceof A;
这是一个事实
因此,我需要在SwiftisKindOfClass()
方法中使用类似的东西,从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
区别在于:
适用于Swift中的任何类,而is
仅适用于属于isKindOfClass()
的子类或以其他方式实现NSObject
的类NSObjectProtocol
采用必须在编译时硬编码的类型is
接受一个表达式,该表达式的值可以在运行时计算isKindOfClass:
is
关键字不像instanceof
那样工作,它的是类的一种:[ClassName class]
let a = A()
let isInstanceOfA = a is A
它的
是类的一种(Classname.class())
对于swift3和swift4它是:
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上定义新方法的原因——必要的函数性已经存在了。