Swift Language
Swiftのログイン
サーチ…
備考
println
とdebugPrintln
はSwift 2.0で削除されました。
ソース:
https://developer.apple.com/library/content/technotes/tn2347/_index.html http://ericasadun.com/2015/05/22/swift-logging/
デバッグ印刷
デバッグ印刷は、デバッグに最も適したインスタンス表示を示します。
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
dump
はdump(_: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()
は出力をデバイスのコンソールに出力しません。