Swift - 以编程方式创建视图问题,无法找到存储的属性
Posted
技术标签:
【中文标题】Swift - 以编程方式创建视图问题,无法找到存储的属性【英文标题】:Swift - Programmatically creating Views Issue, unable to find stored property 【发布时间】:2014-07-05 15:57:29 【问题描述】:我正在尝试学习 Swift 和 ios 视图和视图控制器。
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 Beta 不喜欢它,但它能够找到这一行:
self.rootViewController!.backgroundColor = UIColor.orangeColor()
【问题讨论】:
听起来您对属性感到困惑。 self.window.rootViewController 和 self.rootViewController 的区别你了解吗? @CHBuckingham 无关。 为什么需要一个局部变量来保存rootViewController?你在 AppDelegate 的其他地方需要它吗? @dasdom 没有什么特别的原因,我正在学习以编程方式快速编写视图,就像我在 Objective-C 中所做的那样。 “相同”的代码在 Objective C 中有效,但在 Swift 中无效。不知道为什么编译器可能会因为它是 Beta 不确定而阻塞在该行上。 这个我没有答案,但一般来说,如果你不需要代码,删除它。代码写了一次,读了上百次。更少的代码,更少的负担。 【参考方案1】:问题在于 MyCustomView 是一个 UIView。但是 UIWindow 的 rootViewController
需要一个 UIViewController。
通常,您通过不区分视图控制器和视图而在代码中混淆了自己。但是您确实明智地命名了 MyCustomView,这很好。它有一个backgroundColor
的事实有助于证明它是一个视图,而不是一个视图控制器(视图控制器没有背景颜色)。
【讨论】:
这里的 Swift 编译器错误消息肯定可以改进。 “尝试将 UIView 分配给 UIViewController 属性”会很好!即使是“类型不匹配”也比仅仅声称该属性丢失更好。 正确的亚光,很好的捕捉。我想我今晚编码太久了。谢谢。以上是关于Swift - 以编程方式创建视图问题,无法找到存储的属性的主要内容,如果未能解决你的问题,请参考以下文章