#ios #view #swift
#iOS #Вид #swift
Вопрос:
Я пытаюсь изучить представления Swift и iOS и ViewControllers.
var window: UIWindow?
var rootViewController: MyCustomView?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
// Override point for customization after application launch.
self.rootViewController = MyCustomView()
self.rootViewController!.backgroundColor = UIColor.orangeColor()
var rect = CGRectMake(20, 20, 100, 100)
var label = UILabel(frame: rect)
label.text = "Hello iOS Views"
label.backgroundColor = UIColor.orangeColor()
self.window!.rootViewController = self.rootViewController
self.window!.backgroundColor = UIColor.whiteColor()
self.window!.makeKeyAndVisible()
return true
При компиляции я получаю сообщение об ошибке «Не удалось найти элемент ‘RootViewController'» в следующей строке:
self.window!.rootViewController = self.rootViewController
Не уверен, почему бета-версии Xcode 6 это не нравится, но она может найти эту строку:
self.rootViewController!.backgroundColor = UIColor.orangeColor()
Комментарии:
1. Похоже, вы запутались в свойствах. Понимаете ли вы разницу между self.window.RootViewController и self.RootViewController?
2. @CHBuckingham не имеет значения.
3. Зачем вам нужна локальная переменная для хранения RootViewController? Вам это нужно где-то еще в AppDelegate?
4. @dasdom Без особой причины, я учился программно писать представления в swift, как я делал в Objective-C. «Тот же» код работает в Objective C, но не в Swift. Не уверен, почему компилятор захлебывается в этой строке, возможно, из-за того, что она бета, не уверен.
5. У меня нет ответа на это, но в целом, если вам не нужен код, удалите его. Код написан один раз, но прочитан сто раз. Меньше кода, меньше нагрузки.
Ответ №1:
Проблема в том, что MyCustomView является UIView. Но UIWindow rootViewController
ожидает UIViewController.
Как правило, вы запутались прямо в своем коде, не отличая контроллеры представлений от представлений. Но вы разумно назвали MyCustomView, и это хорошо. Тот факт, что у него есть backgroundColor
, помогает доказать, что это представление, а не контроллер представления (контроллеры представления не имеют цвета фона).
Комментарии:
1. Сообщение об ошибке компилятора Swift здесь определенно может быть улучшено. «Попытка присвоить UIView свойству UIViewController» было бы неплохо! Даже «Несоответствие типов» было бы лучше, чем просто утверждать, что свойство отсутствует.
2. прямо по мэтту, хороший улов. Думаю, я слишком долго кодировал сегодня вечером. Спасибо.