首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在super.init初始化self之前,在属性访问“frame”中使用“self”

是为了确保在访问属性之前,父类的初始化已经完成,以避免访问到未初始化的属性。

具体来说,当一个类继承自另一个类时,子类在初始化时需要先调用父类的初始化方法,以确保父类的属性和方法已经被正确地设置和初始化。在调用父类的初始化方法之前,子类的属性是不能被访问的。

在属性访问“frame”中使用“self”是为了明确指定要访问的是当前类的属性,而不是父类的属性。这是因为在子类中可能存在与父类同名的属性,使用“self”可以确保访问的是子类的属性。

举个例子,假设有一个父类ViewController和一个子类ChildViewController,它们都有一个名为frame的属性。在ChildViewController的初始化方法中,如果需要访问子类的frame属性,就需要使用“self.frame”。如果不使用“self”,而直接使用“frame”,则可能会访问到父类的frame属性。

在腾讯云的产品中,与云计算相关的推荐产品是腾讯云的云服务器(CVM)。云服务器是一种基于云计算技术的虚拟服务器,可以提供弹性的计算能力和可靠的云端服务。您可以通过以下链接了解更多关于腾讯云云服务器的信息:

腾讯云云服务器产品介绍:https://cloud.tencent.com/product/cvm

请注意,以上答案仅供参考,具体的实现方式可能因编程语言和开发环境而有所不同。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深入了解 iOS 的初始化

没有给所有非可选类型属性赋值(初始化完成)之前,不能调用self相关的任何东西,例如:调用实例属性,调用实例方法。...} } } Required Initializers Swift ,可以使用required修饰初始化器,来指定子类必须实现该初始化器。...= name; super.init(frame: frame) } // 必须实现此初始化器,但由于是可失败的初始化器,所以里面可以不做具体实现 required...如果不是可以从多个不同的源初始化,最好只创建一个指定初始化器 • 无论 Objective-C 还是 Swift ,都需要在便利初始化调用指定初始化器 • Objective-C 初始化的时候不需要保证所有属性...必须重写旧的定初始化器,在里面调用新的指定初始化器 • Swift 初始化的时候需要保证类(结构体、枚举)的所有非可选类型属性都会有值 • Swift ,必须在初始化完成后才能调用实例属性

97510

手把手带你撸一个网易云音乐首页(三)

MVVM 好了,回到正题,项目中我们使用了 MVVM 模式,在上一篇文章,我们讲完了 Model 和 ViewModel, 那接下来就开始讲第三部分 View 吧!...View 回到我们的项目工程来,准备构建我们的表视图。 首先,我们的首页视图控制器 DiscoveryViewController 创建存储属性 HomeViewModel 并初始化它。...具体实现该效果的代码在这里我就不做多阐述了,因为之前的文章,我已经将实现这个效果的教程写出来了,查看此文即可:使用 UICollectionView 实现首页卡片轮播效果 圆形菜单入口 该效果实现起来很简单...我们知道 UICollectionView 的属性,有一个分页的属性:isPagingEnabled,当设置成 true 时,每次滚动的位移量等于它自身 frame 的宽度;当不设置这个分页属性,它的默认值是...+ self.minimumLineSpacing } } 之前的文章,我已经将实现这个效果的教程写出来了,查看此文即可:使用 UICollectionView 实现分页滑动效果 音乐日历

2.3K10

Swift 类构造器的使用

init 机制 Swift 中一个实例的初始化是分为两个阶段的 第一阶段是实例的所有属性初始化. 第二阶段是实例的所有属性可以再次的调整以备之后的使用....构造器第一阶段构造完成之前, 不能调用任何实例方法, 不能读取任何实例属性的值,self 不能被引用. 接下来我们来说明一下类构造的两个阶段: 阶段 1 某个指定构造器或便利构造器被调用....构造器此时可以访问 self, 修改它的属性并调用实例方法等等。 最终, 任意构造器链的便利构造器可以有机会定制实例和使用 self 父类的指定构造器定制实例的属性 (可能)....: nil)} 这是第一个解决的办法, 不过我一般使用另一种, 属性定义的时候就为他说初始化一个值....构造器第一阶段构造完成之前, 不能调用任何实例方法, 不能读取任何实例属性的值,self 不能被引用. 继承相关 如果子类没有定义任何的指定构造器, 那么会默认继承所有来自父类的指定构造器.

1.7K20

【读书笔记】The Swift Programming Language (Swift 4.0.3)

Classes and Structures * 可选变量,的确会被自动初始化为 nil. * swift ,可以设置组件的 frame 了.呼哈哈 label.frame.origin.x = 100...Methods * 结构体实例,方法是否能够修改属性,也受实例本身的可变性的影响. * 结构体或枚举等值类型,允许实例方法内,直接给 self 赋值,完整替换. * 枚举类型的相关操作,都可以封装在枚举类型自身...调用 super.init 之前,不能调用任何实例方法,因为对象还没有效初始化. * 用 closure 指定默认值和属性的get/set 方法的区别在于 声明有个等号(=),说明前者是个赋值操作....Optional Chaining * 访问 optional 对象的内部属性时,必须使用 ? 或 !...self],来解决循环引用问题. * 可以证明,self 以外的情况, closure 并不会引起内部使用变量的引用计数的变化.

1.5K100

swift 构造器

,swift构造器无需返回值,主要任务是保证新实例第一次使用前完成正确的初始化 为存储属性初始化值 类和结构体创建实例时,必须为所有存储类型设置初始值 可以构造器设置, 也可以声明属性的时候就给定...类则会有从父类继承构造器的情况要考虑, 不过还是那句话, 所有存储属性构造器中都完成初始化就可以. 对于值类型,你可以使用self.init自定义的构造器引用相同类型的其它构造器。...boy = Boy(a: 2) 两段式构造过程 一个对象的内存只有在其所有存储型属性确定之后才能完全初始化初始化有两阶段 第一阶段,的每个存储属性分配一个初始值 第二阶段,每个类的实例在被使用之前进一步定义其存储的属性...构造器此时可以访问self修改它的属性并调用实例方法等等 • 最终,任意构造器链的便利构造器可以有机会定制实例和使用self class Student { var type:String...4.构造器第一阶段构造完成之前,不能调用任何实例方法,不能读取任何实例属性的值,不能引用self作为一个值 构造器的继承和重写 跟 OC 的子类不同,Swift 的子类默认情况下不会继承父类的构造器

16110

【Android Gradle 插件】Gradle 扩展属性 ② ( 定义根目录 build.gradle 的扩展属性 | 使用 rootProject.扩展属性访问 | 扩展属性示例 )

文章目录 一、定义根目录 build.gradle 的扩展属性 二、扩展属性示例 Android Plugin DSL Reference 参考文档 : Android Studio 构建配置官方文档...build.gradle 的扩展属性 ---- org.gradle.api.Project 配置 ( build.gradle 根配置 ) 文档 : https://docs.gradle.org...Module 模块下的 build.gradle 都可以获取到该扩展属性值 ; Module 下的 build.gradle 可以使用 rootProject.扩展属性名 来访问定义根目录...build.gradle 定义的扩展属性值 ; 二、扩展属性示例 ---- 根目录下的 build.gradle 定义扩展属性 : // 定义扩展属性 , 其中的变量对所有子项目可见 ext {...} build.gradle 定义 变量 , 然后自定义 task 任务 , 输出该变量 , 代码如下 : // 定义局部变量 def hello = 'Hello World!'

2.9K20

iOS 仿支付宝银行卡界面(支持Swift和OC)

钱包视图中实现添加卡片方法 钱包视图中实现卡片展示和隐藏回调方法 创建卡片视图ColoredCardView继承于CardView CardView实现点击手势展示隐藏卡片 导入项目使用介绍...初始化WalletView并加载钱包头部视图walletHeader 需要加载钱包的地方初始化WalletView,并自定义头部视图walletHeader和卡片视图,Demo 以ViewController...钱包视图中重新加载卡片视图 钱包视图中重新加载卡片视图,在这里为了灵活修改方便使用,页面布局可以自定义,Demo模仿支付宝页面进行设计,CardView视图中,主要实现页面的交互等功能,具体的UI...override init(frame: CGRect) { super.init(frame: frame) setupSubViews() } } 7....导入项目使用介绍 最后介绍一下该如何在项目中导入该功能,下载Demo,将Demo的FBYBankCard.framework文件和ColoredCardView.swift文件导入项目中,需要加载的页面中直接引用即可

1.4K20

Swift| 基础语法(四)

Swift,如果在某个类定义一个属性,那么这个属性必须要初始化,否者会报错, 如果暂时不想初始化,那么可以在后面写上一个 ?...号 但是定义闭包的属性时,一定要注意,以下这种写法是最常见的一种错误写法: /** 当前写法代表闭包的返回值可以是nil,而不是初始化的闭包 */ var finished: () -> (...闭包的循环引用问题 Swift开发,有一个原则就是能不写self就不写self,但是闭包必须写上self; 这是因为闭包是用来保存一段代码,而且系统也不知道这段代码具体的调用时间, 所以为了保证闭包的对象不被释放...想要在 Swift 中使用 weak delegate,我们就需要将 protocol 限制 class 内。...4.0使用系统方法setValuesForKeys()进行赋值,明明有这个属性,但它还是走 override func setValue(_ value: Any?

1.4K10

给UICollectionView设置组背景和组圆角-Swift

frame.size.width - (2 * self.marginValue) sectionFrame.size.height += self.sectionInset.top...,不要忘记我们是根据修饰View初始化得到这个属性的,按照正常的操作我们会在最后返回一个属性数组,自定义过collection布局的应该清楚一些,具体的PPCollectionViewDelegateFlowLayout...返回rect的所有的元素的布局属性 /// - Parameter rect: rect description override func layoutAttributesForElements...registClass这个方法我们PPBaseFlowLayout的初始化方法里面调用就可以了,还有属性数组这写就不用说了吧还是在前面自己定义初始化了。...最后初始化CollectionView的时候layout就是我们定义的PPBaseFlowLayout了,遵守的代理就是PPCollectionViewDelegateFlowLayout,这个需要留意下就

3.5K51

Swift3.0 - 初始化和释放

注意 1.系统要求存储属性必须初始化 2.可选值可以不用初始化,如果不初始化值,系统默认用nil初始化它 3.如果非可选类型存储属性不设置默认值,则必须在初始化方法对其进行初始化 4.类必须自己写初始化方法...,初始化没有默认值的非可选存储属性 5.结构体系统默认会添加初始化方法,当然自己也可以自定义 6.子类如果没有自己的初始化方法,系统默认使用父类的初始化方法,一旦有了自己的初始化方法,或者重写了父类的初始化方法...= height } init(name:String) { self.name = name } } 方便初始化(convenience) 记住: 1.同一个类,使用convenience...修饰的方便初始化方法 4.swift3.0 初始化,可以自己调用自己的初始化方法,系统不会检测出来,创建convenience方便初始化方法的时候,需要小心,千万不要相互引用了 ?...} } 对于可能出现空值的对象或者其他类型,使用之前必须进行验证 enum TemperatureUnit: Character { case kelvin = "K", celsius = "C",

53010

Swift基础-init详解

前言 讲解Swift的init之前,默认都有Swift开发基础,了解关键字designated,Optional,override,convenience等。...class.png 子类强制调用super版本的designated初始化初始化方法的顺序:先初始化本类属性,再初始化父类; 目的 深入讲解初始化方法之前,不妨先思考下Swift初始化想要达到一种怎样的目的...Objective-C,init方法是非常不安全的:没有人能保证init只被调用一次,也没有人保证初始化方法调用以后,实例的各个变量都完成初始化,甚至如果在初始化使用属性进行设置的话,还可能会造成各种问题...虽然Apple也明确说明了不应该在init中使用属性访问,但这并不是编译器强制的,因此还是会有很多开发者犯这样的错误。所以Swift有了超级严格的初始化方法。...便利构造方法(convenience) 与designated初始化方法对应的是init前加上convenience关键字的初始化方法,这类方法是Swift初始化方法的“二等公民”,只作为补充和提供使用上的方便

1.1K20

Swift学习:构造器(

使用之前,我们需要了解一些基本的问题: 类中所有存储属性,包括继承父类的属性,都要在构造过程设置初值 Swift类的构造器分为指定构造器和便利构造器,确保完成构造过程 一、指定构造器和便利构造器 指定构造器...: 类的主要构造器,负责初始化类中所有属性继承关系可调用父类链的父类构造器 每个类至少一个指定构造器。...第二阶段:给当前类一个机会,新实例准备使用之前进一步修改定制存储型的属性。...否则,便利构造器赋予的新值将被同一类其它指定构造器所覆盖。 构造器第一阶段构造完成之前,不能调用任何实例方法,不能读取任何实例属性的值,不能引用self 作为一个值,因为此时还没构造有效实例。...第二阶段: 从顶部构造器链一直往下,每个构造器链类的指定构造器都有机会进一步定制实例。构造器此时可以访问self、修改它的属性并调用实例方法等等。

91080

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券