В чем разница между классами NS и non NS? В частности, NSDate
vs Date
? Представляет ли NS
некоторый тип оболочки вокруг функциональности ядра NS
?
Swift 3: Дата против NSDate?
Ответ 1
Swift 3 представил новые типы значений наложения для существующих
Типы типов классов, такие как Date
для NSDate
, Data
для
NSData
и еще несколько. Полный список и сведения можно найти в
Некоторые из причин были
- Предоставить правильную семантику значений,
-
let
иvar
вместо изменяемых и неизменяемых вариантов, - более "Swifty" API.
Новые типы наложений должны обеспечивать все функциональные возможности, которые соответствующий тип Foundation имеет, но при необходимости вы всегда можно отбрасывать от одного типа к другому.
Когда существующие API-интерфейсы Foundation импортированные в Swift, типы автоматически соединяются.
В отношении Date
и NSDate
: Date
- тип значения
и может быть константой или переменной:
var date = Date()
date += 10.0 // Add 10 seconds
тогда как NSDate
является ссылочным типом и неизменным.
Также Date
есть Comparable
let date1 = Date()
let date2 = Date()
if date1 < date2 { }
тогда как NSDate
можно сравнить только с .compare()
.
Примечание. Для этих "типов наложения" тип значения (struct)
такой как Date
и его базовый аналог (класс), такой как NSDate
являются разными типами, и оба могут использоваться из Swift.
Его нельзя путать с
где префикс NS
просто отключен для определенного Foundation
классы, например. NSBundle
переименовывается в Bundle
для Swift 3.
Ответ 2
Классы NS являются классами Objective-C. Поскольку Objective-C - это старый язык программирования для приложений iOS или MacOS, Swift позволяет использовать эти классы в вашем коде. Таким образом, вы можете перенести приложения из Objective-C в Swift, если хотите.
Не-NS классы или структуры являются эквивалентами Swift классов или структур NS. Подробнее об этом выпуске здесь или здесь.
Но имейте в виду: поскольку Objective-C и Swift - это разные языки программирования, может случиться так, что классы NS и non-NS не будут полностью работать одинаково.
Ответ 3
Как и ответы, приведенные выше, в более поверхностном литературном смысле дизайна NS был префиксом, данным всем в дни NextStep, прежде чем Стив Джобс был вызван обратно в Apple, и поэтому он был естественной частью Objective-C синтаксис.
Ускоренная перемотка вперед к разработке Swift, им нужна была точка очевидной разницы, и, возможно, это был CL в качестве префикса (для Криса Лэттнера), но, очевидно, предпочел отсутствие какого-либо префикса
Ответ 4
Разница между классами NS и non NS заключается в том, что классы NS являются ссылочным, тогда как классы non NS - это тип значений. В быстром 3 Apple представила классы Foundation, такие как NSDate, и переименовала их в Date, но так как swift основан на типах значений, а не на ссылочном типе, поэтому Date является типом значений. Например:
let date = NSDate() //1
date.dateByAddingTimeInterval(1000) //2
2. Допустимо, поскольку дата является постоянной, но изменчивость зависит от класса, а не переменной vs.
тогда
let date = Date() //3
date.dateByAddingTimeInterval(1000) //4
4. не допускается и не приведет к ошибке, так как let делает "date" константой с "let", поскольку date является типом Date(), который является типом значения.
Ответ 5
NSDate
и Date
- это не одно и то же. Классы NS (следующий шаг) в текущий момент используются только в Objective-C, поэтому в Objective-C для представления переменной даты NSDate.
Что касается специально Swift 3.0, то новая версия Swift Apple полностью устранила необходимость использования префикса NS для любого из типов. Итак, только в Swift три теперь мы используем Date вместо NSDate. чтобы ваш код выглядел более чистым.