Поиск…


замечания

println и debugPrintln где удалено в 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

Отладка печати

Debug Print показывает представление экземпляра, наиболее подходящее для отладки.

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"]

Обратите внимание, как на первом выходе появляется, что в массиве есть 4 элемента, а не 3. Для таких целей предпочтительнее, когда отладка используется 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: bar
- .1: 33
▿ [1]: (2 элемента)
- .0: baz
- .1: 42
▿ [2]: (2 элемента)
- .0: foo
- .1: 10

dump объявлен как dump(_:name:indent:maxDepth:maxItems:) .

Первый параметр не имеет метки.

Доступны другие параметры, такие как name для установки метки для проверяемого объекта:

dump(attributes, name: "mirroring")

Печать:

▿ зеркалирование: 3 пары ключ / значение
▿ [0]: (2 элемента)
- .0: bar
- .1: 33
▿ [1]: (2 элемента)
- .0: baz
- .1: 42
▿ [2]: (2 элемента)
- .0: foo
- .1: 10

Вы также можете печатать только определенное количество элементов с помощью maxItems: чтобы проанализировать объект до определенной глубины с помощью maxDepth: и изменить отступ отпечатанных объектов с помощью indent:

Многие из нас начинают отладку с помощью простого 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() особенно полезен для отладки пользовательского интерфейса

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() , таких как:

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]

Он также будет печатать имя проекта вместе с меткой времени.

2 Только строка: NSLog() принимает только String как вход, но 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 Консоль устройств: выходы NSLog() на консоли устройства также можно увидеть, подключив наше устройство к Xcode. print() не будет выводить вывод на консоль устройства.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow