【问题标题】:What method/property does "xcrun swift" use for results?“xcrun swift”使用什么方法/属性来获取结果?
【发布时间】:2016-08-09 17:11:20
【问题描述】:

我的第一个猜测是debugDescriptiondescription,但是使用 NSURL,我得到了一些有趣的东西:

$ cd /tmp
$ xcrun swift
Welcome to Apple Swift version 2.2 (swiftlang-703.0.18.8 clang-703.0.30). Type :help for assistance.
  1> import Foundation
  2> NSURL(fileURLWithPath: "X")
$R0: NSURL = "X -- ile:///private/tmp/"

不是debugDescriptiondescription

  3> NSURL(fileURLWithPath: "X").debugDescription
$R1: String = "X -- file:///private/tmp/"
  4> NSURL(fileURLWithPath: "X").description
$R2: String = "X -- file:///private/tmp/"

很明显,如果您只是定义 debugDescriptiondescription(如 class Foo here),它不会打印它们。 (它将它们用于print()debugPrint()。)

不过,默认情况下它会在 repl 中打印什么?

【问题讨论】:

    标签: swift read-eval-print-loop


    【解决方案1】:

    REPL 是 lldb 的扩展。因此,对于类和结构,它在评估后打印类型摘要。您可以找到有关 here 的更多信息。

    您可以为类创建自定义类型摘要。比如我可以输入:

    class MyClass: NSObject
    {
    
    }
    
    let myClass = MyClass()
    

    进入 REPL,打印:

    myClass: MyClass = {
      ObjectiveC.NSObject = {
        isa = __lldb_expr_45.MyClass
      }
    }
    

    然后我可以通过输入: 来进入 lldb

    type summary add --summary-string "This is a MyClass" MyClass
    

    我可以通过输入以下命令回到 REPL:repl

    现在,当我说 let myClass = MyClass(), 时,我明白了:

    myClass: MyClass = This is a MyClass
    

    【讨论】:

    • 嗯,这很有趣也很有用,但我更困惑的是我的路径 "X" 现在会变成"X -- ile:///private/tmp/"
    • 我猜这是 NSURL 的类型摘要中的一个错字,但我对它是如何到达那里没有任何具体的了解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    相关资源
    最近更新 更多