【发布时间】:2021-02-14 10:34:49
【问题描述】:
我正在尝试在 Swift 中做一些事情,包括运行时检查由于存储为 Any 而被删除的类型(我知道这听起来很难看,但这是一个狭窄的用例,我有很好的理由)。我遇到了一个奇怪的问题,可以用这些例子来总结:
这在 cli/REPL 下有效:
let pType: Any.Type = Int.self
if let x = 3 as? pType { print("found an int") }
但这不起作用:
let pType: Any.Type = Int.self; if let x = 3 as? pType { print("found an int") }
并导致错误:在范围内找不到类型'pType'
当构建为程序时,无论哪种形式,我都会遇到相同的错误。
谁能解释为什么这不起作用?如果有什么办法解决这个问题?如果我所做的完全是错误的,为什么它在 REPL 中有效?
【问题讨论】:
-
"这在 cli/REPL 下工作" 好吧,它不应该。 “如果我所做的完全是错误的,为什么它在 REPL 中起作用?” is 完全是错误的,但我无法解释为什么它在 REPL 中有效。导致这种异常的范围规则有一些非常奇怪的地方。如果您在实际项目中尝试它,您会发现它无法编译,这是正确的。你不能像这样用
let定义一个元类型。这不是 Ruby 或类似的古怪有趣的语言。 :)