Класс Swift против класса касания какао в Xcode6

Я новичок в разработке iOS и начал непосредственно со Swift.

Когда я хочу добавить новый файл в проект, IDE предоставляет мне два файла, которые, кажется, используются взаимозаменяемо в учебных пособиях, которые я видел до сих пор. Это «Класс Какао Тач» и «Класс Свифта».

Когда я создаю новый класс Cocoa Touch, это то, что я получаю (в зависимости от унаследованного класса)

import UIKit

class CtTest: NSObject {

}

и когда я создаю новый файл Swift, я получаю следующее: -

import Foundation

Расширение для обоих этих классов - .swift.

Если я добавлю определение класса в файл Swift и изменю его следующим образом: -

import UIKit
import Foundation

class SwTest:NSObject
{
}

есть ли разница между двумя файлами?

Если да, то какие классы предпочтительнее в каких сценариях, например. Просмотр контроллеров, моделей и т. Д.

Спасибо


person Rajeev Bhatia    schedule 30.07.2014    source источник
comment
Foundation - это структура, которая определяет NSObject, NSString, NSArray и т. Д. Все основные классы объектного C. UIKit, с другой стороны, определяет представления, контроллеры представлений, элементы управления (например, UIButton) и т. Д. Обычно вы импортируете Foundation для классов моделей (данные) и UIKit для классов представления / контроллера (представление, логика).   -  person Nicolas Miari    schedule 30.07.2014
comment
Приложение: Foundation является общим для iOS и OS X. UIKit предназначен только для iOS.   -  person Nicolas Miari    schedule 30.07.2014
comment
Спасибо за ответ, Николас. Имеет смысл, почему класс Cocoa Touch будет импортировать Foundation, а классы Swift - UIKit. Должен ли я тогда предпочесть классы Swift для контроллеров представления и классы касания какао для моделей (хотя я бы, скорее всего, использовал типы данных Swift, такие как String, Int, Dictionary и т. Д., Вместо типов данных Foundation, таких как NSNumber, NSString и NSDictionary, что делает Foundation как бы избыточным) .   -  person Rajeev Bhatia    schedule 30.07.2014
comment
Я сам еще не использовал Swift, но посмотрите ответ @drewag ниже; он очень хорошо написан и закончен.   -  person Nicolas Miari    schedule 30.07.2014
comment
Да, действительно, это так. Я также нашел классы Cocoa Touch более полезными, когда вам нужно добавить некоторые методы по умолчанию (как я упоминал в своем комментарии к его ответу). Еще раз спасибо за ваш вклад!   -  person Rajeev Bhatia    schedule 30.07.2014


Ответы (1)


Между двумя разными шаблонами нет никакой разницы, кроме кода, который они помещают в файл по умолчанию. Как вы заметили, они оба имеют одинаковое расширение, и оба представляют собой простые текстовые файлы - компилятор не обрабатывает их по-разному.

Общее практическое правило - импортировать модуль только в том случае, если он вам нужен в этом файле - в противном случае вы получите ошибку компиляции. Вы получите ошибку компилятора из-за отсутствия импорта, если попытаетесь использовать их типы.

Фонд

Foundation - это в основном стандартная библиотека разработки Apple, реализованная в Objective-C. Он включает такие типы данных, как NSArray, NSString и NSDictionary. Однако Swift предоставляет замену для этих типов данных: Array, String и Dictionary. Вам нужно только import Foundation в файлах, которые пытаются взаимодействовать с API Objective-C. Однако, поскольку все существующие API-интерфейсы написаны на Objective-C (поскольку Swift настолько новый), вам придется импортировать Foundation почти во все файлы, кроме базовых объектов домена.

UIKit

UIKit фактически включает Foundation. Если вы импортируете UIKit, вам также не нужно импортировать Foundation. UIKit - это набор стандартных API, специфичных для интерфейса iOS. Он включает в себя такие представления, как UITableView, и контроллеры, такие как UIViewController. Вам нужно будет импортировать это всякий раз, когда вы работаете с пользовательским интерфейсом приложений iOS.

Класс какао Touch

Этот шаблон полезен для создания подклассов из UIKit и потенциально позволяет Xcode генерировать файлы построителя интерфейса для вас. Если вам не нужно ни то, ни другое, вам следует просто использовать шаблон Swift Class. Унаследовать объект от NSObject можно только в том случае, если это действительно необходимо (если вам нужно иметь возможность использовать свой класс Swift из Objective-C). Если вы не наследуете NSObject, компилятор может сделать дополнительную оптимизацию и позволяет избежать некоторых более медленных частей среды выполнения Objective-C.

person drewag    schedule 30.07.2014
comment
Спасибо за прекрасный ответ, drewag. Я просто попытался создать два примерных класса (один Swift и один Cocoa Touch), которые должны были бы унаследовать UITableViewController. Конечно, мне пришлось сделать всю тяжелую работу для класса Swift, но класс Cocoa Touch добавил для меня все необходимые методы. Еще раз спасибо! - person Rajeev Bhatia; 30.07.2014