请考虑以下代码:
let nsdate: NSDate? = NSDate()
if let date = nsdate as? Date { // a warning occurs here
print(date)
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨如下: Conditional downcast from 'NSDate?' to 'Date' is a bridging conversion; did you mean to use 'as'?
从铸造NSData到Data有同样的问题.怎么解决呢?
现在我需要一种方便的方法来获取枚举本身的名称?这是一个例子.
enum SimpleEnum {
case firstCase
case secondCase
case thirdCase
}
let simpleEnum: SimpleEnum = .firstCase
print("\(simpleEnum)") // return the "firstCase", but I want "SimpleEnum"
Run Code Online (Sandbox Code Playgroud)
我知道以下代码可行.
enum SimpleEnum: CustomStringConvertible {
case firstCase
case secondCase
case thirdCase
var description: String { return "SimpleEnum" }
}
let simpleEnum: SimpleEnum = .firstCase
print("\(simpleEnum)") // Ok, it return "SimpleEnum"
Run Code Online (Sandbox Code Playgroud)
但是,我只想要一种通用方式,而不是为每个枚举键入"SimpleEnum".
我在协议扩展中给出了一些默认的实现代码。但是如何在符合协议的类中调用此指定代码。这是一个例子:
class BaseClass {}
protocol ImplementedProtocol {
func printInfo()
}
extension ImplementedProtocol where Self: BaseClass {
func printInfo() {
print("Hello! This is ImplementedProtocol")
}
}
class SuperClass: BaseClass, ImplementedProtocol {
func printInfo() {
// I should do sth here.
print("Hello! This is SuperClass")
}
}
class SubClass: SuperClass {
override func printInfo() {
super.printInfo()
print("This is SubClass")
}
}
let a = SubClass()
a.printInfo() // I get "Here is SuperClass. Here is SubClass."
// But I want "Here is ImplementedProtocol. …Run Code Online (Sandbox Code Playgroud)