在 Swift 的 UIKit 文档中查找有关构造函数的信息
Posted
技术标签:
【中文标题】在 Swift 的 UIKit 文档中查找有关构造函数的信息【英文标题】:Finding information about constructors in the UIKit documentation for Swift 【发布时间】:2014-07-03 12:32:21 【问题描述】:我目前正在尝试通过阅读 Apple 提供的书籍并参考 Swift 的 UIKit API 来学习 Swift。
这是我在网上找到的创建简单 UIButton 的代码...
var button = UIButton(frame: CGRectMake(0, 20, 100, 32))
button.setTitle("I'm a Button", forState: UIControlState.Normal)
button.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)
view.addSubview(button)
一切都是不言自明的,但我不明白的是,如果我在 UIKit documentation 的任何地方都没有看到 UIButton 有一个构造函数(初始化程序),我们怎么知道它。
这是我希望更好地理解的代码行。
var button = UIButton(frame: CGRectMake(0, 20, 100, 32))
再次,如果我认为 UIButton 没有在 UIButton class 中的任何位置列出,我怎么知道 UIButton 有一个构造函数,该构造函数获取一个 CGPoint 作为参数?
谢谢
【问题讨论】:
仅供参考,感谢 Swift 的类型推断系统,您不需要UIControlState
,只需 .Normal
就足够了。
请注意,使用init(frame:)
将不允许您指定按钮的类型。
【参考方案1】:
那是因为UIButton
从它的超类继承初始化器直到NSObject
如果您检查documentation 中的UIView
,它是UIControl
的超类,它是UIButton
的直接超类,您将看到以CGRect
作为参数的初始化程序。
因此,基本上,如果您想查看给定类的所有可用初始化程序,您必须在其类层次结构中一直向上查找。
【讨论】:
在 Swift 中,它只从指定它们的最高类继承构造函数,在本例中为UIView
。
@Kevin 不确定。如果您定义 NSObject
的扩展来添加便利初始化程序,那么 UIButton
将可以使用它。【参考方案2】:
引用的代码行与
UIButton * button = [[UIButton alloc] initWithFrame:CGRectMake(0.f, 20.f, 100.f, 32.f)];
在 ObjC 中。
关键点在这里,–initWithFrame:
是 UIView
类的方法,UIButton
继承自该类,因此如果您需要了解更多关于特定方法的信息,您可能需要检查父类类或其父级等,以查找它。
在引用的文档中,您可以找到有关 继承 的部分,例如:
你可以一一检查实际类的父类的方法。这就是您如何获得更多关于未在实际类参考中“列出”的方法的信息。
【讨论】:
非常感谢您的帮助。【参考方案3】:我的部分困惑是因为我希望找到一个构造函数而不是初始化程序。
UIView 列出了如下的初始化器...
init(frame:)
init(frame aRect: CGRect)
... 这在 Objectice-C 中是有意义的,因为它没有构造函数,而是使用初始化程序,但对于 Swift,我期待更像一个构造函数,其中构造函数的名称与类相同,类似于。 ..
UIButton (frame:)
CGRect UIButton (frame aRect: CGRect)
或者在这种情况下是 UIView 构造函数
UIView (frame:)
CGRect UIView (frame aRect: CGRect)
我不知道我在哪里读到 Swift 支持的构造函数。我想我需要阅读更多关于 Swift 和一般编程的信息。
谢谢
【讨论】:
以上是关于在 Swift 的 UIKit 文档中查找有关构造函数的信息的主要内容,如果未能解决你的问题,请参考以下文章
如何在现有 UIKit 类(如 UIColor)的扩展中添加初始化程序?
在 CGRectMake、Swift、UIkit 中使用变量
Stripe - 单一方法预构建 UI,STPAPIClient.shared().publishableKey iOS Swift UiKit