サーチ…


備考

printlndebugPrintlnはSwift 2.0で削除されました。

ソース:

https://developer.apple.com/library/content/technotes/tn2347/_index.html http://ericasadun.com/2015/05/22/swift-logging/

http://www.dotnetperls.com/print-swift

デバッグ印刷

デバッグ印刷は、デバッグに最も適したインスタンス表示を示します。

print("Hello")
debugPrint("Hello")

let dict = ["foo": 1, "bar": 2]

print(dict)
debugPrint(dict)

収量

>>> Hello
>>> "Hello"
>>> [foo: 1, bar: 2]
>>> ["foo": 1, "bar": 2]

この追加情報は非常に重要です。たとえば、次のようになります。

let wordArray = ["foo", "bar", "food, bars"]

print(wordArray)
debugPrint(wordArray)

収量

>>> [foo, bar, food, bars]
>>> ["foo", "bar", "food, bars"]

最初の出力では、3とは対照的に配列に4つの要素があるように見えます。このような理由から、 debugPrint

デバッグとプリントのクラスの更新

struct Foo: Printable, DebugPrintable {
    var description: String {return "Clear description of the object"}
    var debugDescription: String {return "Helpful message for debugging"}
}

var foo = Foo()

print(foo)
debugPrint(foo)

>>> Clear description of the object
>>> Helpful message for debugging

ダンプ

dumpは、リフレクション(ミラーリング)を介してオブジェクトの内容を出力します。

配列の詳細ビュー:

let names = ["Joe", "Jane", "Jim", "Joyce"]
dump(names)

印刷物:

▿4つの要素
- [0]:ジョー
- [1]:ジェーン
- [2]:ジム
- [3]:ジョイス

辞書の場合:

let attributes = ["foo": 10, "bar": 33, "baz": 42]
dump(attributes)

印刷物:

▿3つのキーと値のペア
▿[0]:(2要素)
- .0:バー
- .1:33
▿[1]:(2要素)
- .0:バズ
- .1:42
▿[2]:(2要素)
- .0:foo
- .1:10

dumpdump(_:name:indent:maxDepth:maxItems:)と宣言されています。

最初のパラメータにはラベルがありません。

検査対象オブジェクトのラベルを設定するためのnameような他のパラメータもあります。

dump(attributes, name: "mirroring")

印刷物:

ミラーリング:3つのキーと値のペア
▿[0]:(2要素)
- .0:バー
- .1:33
▿[1]:(2要素)
- .0:バズ
- .1:42
▿[2]:(2要素)
- .0:foo
- .1:10

あなたも持つアイテムの唯一の特定の数の印刷を選択することができますmaxItems:持つ特定の深さまでオブジェクトを解析するために、 maxDepth:として印刷されたオブジェクトのインデント変更するにはindent:

print()とdump()

多くの人が簡単なprint()デバッグを開始します。そのようなクラスがあるとしましょう:

class Abc {
    let a = "aa"
    let b = "bb"
}

Abcインスタンスは次のようになります。

let abc = Abc()

変数に対してprint()を実行すると、出力は次のようになります。

App.Abc

dump()出力

App.Abc #0
- a: "aa"
- b: "bb"

見てきたように、 dump()はクラス階層全体を出力しますが、 print()単にクラス名を出力します。

したがって、 dump()はUIのデバッグに特に便利です

let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))

dump(view)を使うと以下のようになります:

 - <UIView: 0x108a0cde0; frame = (0 0; 100 100); layer = <CALayer: 0x159340cb0>> #0
    - super: UIResponder
      - NSObject 

print(view)は次のようになります:

<UIView: 0x108a0cde0; frame = (0 0; 100 100); layer = <CALayer: 0x159340cb0>>

dump()にはクラスに関する情報がたくさんあるので、クラス自体のデバッグにはもっと便利です。

印刷対NSLog

迅速で、我々は両方使用することができますprint()NSLog() Xcodeのコンソール上で何かを印刷する機能。

しかし、 print()NSLog()関数には次のような違いがありprint()

1 TimeStamp: NSLog()は渡された文字列と共にタイムスタンプを出力しますが、 print()はタイムスタンプを出力しません。
例えば

let array = [1, 2, 3, 4, 5]
print(array)
NSLog(array.description)

出力:

[1,2,3,4,5]
2017-05-31 13:14:38.582 ProjetName [2286:7473287] [1,2,3,4,5]

ProjectNameとtimestampも表示されます。

2唯一の文字列: NSLog()は文字列を入力として受け取りますが、 print()はそれに渡された任意のタイプの入力を印刷できます。
例えば

let array = [1, 2, 3, 4, 5]
print(array) //prints [1, 2, 3, 4, 5]
NSLog(array) //error: Cannot convert value of type [Int] to expected argument type 'String'

3パフォーマンス: NSLog()関数はprint()関数に比べて非常に遅いです。

4同期: NSLog()は、マルチスレッド環境からの同時使用を処理し、重複することなく出力を出力します。しかし、 print()はそのような場合を処理せず、出力をpratingしながら混乱します。

5 Device Console:デバイスコンソールに NSLog()も出力されます。この出力は、デバイスをXcodeに接続することで確認できます。 print()は出力をデバイスのコンソールに出力しません。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow