我正在处理一些对此无关紧要的事情:
func isAnyObject<T>(someObject: T) {
if let object = someObject as? AnyObject {
// do something
} else {
// do something else
}
}
这给了我编译器警告:
我理解为什么演员总是成功,但我不知道如何解决它。我尝试将第2行更改为
if let object = foo as AnyObject?
但是当我通过该函数传递一个结构时,它仍然会进入&#39;如果&#39;块。我在这里缺少什么?
答案 0 :(得分:0)
实际上,我无法重现您所展示的错误。但是,编译器确实会抱怨函数参数中的明显错误。
df %>% rename_(.dots = setNames(paste0('`', names(.), '`'),
gsub("<?(-?[0-9A-Z]*)>?", "Port\\1", names(.))))
## # A tibble: 500 × 3
## Port1 Port2 PortNA
## <int> <int> <int>
## 1 1 1 1
## 2 2 2 2
## 3 3 3 3
## 4 4 4 4
## 5 5 5 5
## 6 6 6 6
## 7 7 7 7
## 8 8 8 8
## 9 9 9 9
## 10 10 10 10
## # ... with 490 more rows
答案 1 :(得分:0)
您可以检查变量的类型是否为AnyObject。如果是这样的话它的引用类型。如果不是它的值类型。我也在操场上发出警告,但警告是错误的。下面的代码产生false,false,false,false,true,因此很清楚该函数是有效的,并且测试并不总是如警告所说的那样。这是一个错误。
func isReferenceType<T>(someObject: T) -> Bool {
return type(of: someObject) is AnyObject
}
//Values
print(isReferenceType(someObject: "a"))
print(isReferenceType(someObject: 1))
print(isReferenceType(someObject: Int?(0)))
print(isReferenceType(someObject: {print("1")}))
//Reference
print(isReferenceType(someObject: UIView()))