Swift 08.页面传值
OC中经常用到的一种初始化控制器的方法.比如A push B.并且将A的一个值:value 传递给B 使用.简单的办法就是 在B重构init方法.比如在.h 中定义:
- ()initValue:(NSString *)value;
然后在.m中实现
-()initValue:(NSString *)value {
self = [super init];
if (self) {
self.value = value;
}
return self;
}
但是如果在swift中也这么写.那么就会出现问题了.
class B:UIViewController {
var param:String?
init(param: String) {
super.init()
self.param = param
}
报的错误是:
‘required‘ initializer ‘init(coder:)‘ must be provided by subclass of ‘UIViewrController‘
Super.init isn‘t called before returning from initializer
看到这个错误的时候,很迷惑.哪里错了?然后开始查找资料
1,在 Swift 中, 类的初始化器有两种, 分别是Designated Initializer(指定初始化器)和Convenience Initializer(便利初始化器)
2,如果子类没有定义任何的指定初始化器, 那么会默认继承所有来自父类的指定初始化器。
3,如果子类提供了所有父类指定初始化器的实现, 那么自动继承父类的便利初始化器
4,如果子类只实现部分父类初始化器,那么父类其他的指定初始化器和便利初始化器都不会继承。
5,子类的指定初始化器必须要调用父类合适的指定初始化器。
那么原因就很明显了.修改一下,就可以正常传值了
init(value:String){
self.value = value
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
一般来说,子类的初始化顺序是:
设置子类自己需要初始化的参数,valu = 10
调用父类的相应的初始化方法,super.init()
对父类中的需要改变的成员进行设定,name = "name"
其中第三步是根据具体情况决定的,如果我们在子类中不需要对父类的成员做出改变的话,就不存在第 3 步。而在这种情况下,Swift 会自动地对父类的对应 init 方法进行调用,也就是说,第 2 步的 super.init() 也是可以不用写的 (但是实际上还是调用的,只不过是为了简便 Swift 帮我们完成了)
如果我们不需要打改变 name 的话,
虽然我们没有显式地对 super.init() 进行调用
不过由于这是初始化的最后了,Swift 替我们自动完成了
这就是对于init传值的一种记录吧
ps:因为Swift的特性.init()方法只会调用一次.是线程安全的.
Swift 08.页面传值的更多相关文章
- Spring MVC 向页面传值-Map、Model、ModelMap、ModelAndView
Spring MVC 向页面传值,有4种方式: ModelAndView Map Model ModelMap 使用后面3种方式,都是在方法参数中,指定一个该类型的参数. Model Model 是一 ...
- 【页面传值6种方式】- 【JSP 页面传值方法总结:4种】 - 【跨页面传值的几种简单方式3种】
阅读目录 1. URL 链接后追加参数 2. Form 3. 设置 Cookie 4. 设置 Session JSP 页面间传递参数是项目中经常需要的,这应该算是 web 基本功吧. 试着将各种方式总 ...
- ASP.NET MVC 5 Web编程5 -- 页面传值的方式
本篇文章将讲述MVC的页面传值方式,具体包括:后端向前端传值(Controller向View传值):前端向后端传值(View向Controller传值):Action与Action之间的传值. 回顾 ...
- WebForm 页面传值
一.使用Querystring Querystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象.如果你想传递一个安全性不是那么太重要或者是 ...
- Spring 向页面传值以及接受页面传过来的参数的方式
来源于:http://www.cnblogs.com/liuhongfeng/p/4802013.html 一.从页面接收参数 Spring MVC接收请求提交的参数值的几种方法: 使用HttpSer ...
- ASP.NET页面传值不使用QueryString
ASP.NET页面传值不使用QueryString Asp.net中的页面传值方法: 1 Url传值 特点:主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址 ...
- artdialog4.1.7 中父页面给子页面传值
artdialog4.1.7中父页面给子页面传值时看了一些网友的解决方法: 在父页面声明全局变量 var returnValue=“ ”,子页面用art.dialog.opener.returnVal ...
- webform页面传值和删除修改
一.webform跨页面传值1.内置对象地址栏数据拼接 QueryString 优点:简单好用:速度快:不消耗服务器内存. 缺点:只能传字符串:保密性差(调转页面后在地址栏显示):长度有限.响应请求对 ...
- Spring-MVC接收request参数和向页面传值总结
接收请求参数值,三种方式: 1使用HttpServletRequest获取 2使用@RequestParam注解 3使用自动封装机制封装成bean对象 向页面传值 1直接使用HttpServletRe ...
随机推荐
- TTradmin v1.1 - 免端口映射穿透任何内网、基于radmin核心的即时远程协助
TTradmin 是一款免端口映射可直接穿透任何内网,基于radmin核心的即时远程协助软件.在使用的时候只需要保证“协助端”和“被协助端”使用同一个验证码即可实现安全便捷的远程控制,不需要进 ...
- 理解 JavaScript 作用域和作用域链
http://www.cnblogs.com/lhb25/archive/2011/09/06/javascript-scope-chain.html
- php保留键随机打乱数组顺序
最近遇到一个需求,把一个数组随机打乱顺序,我们可以用php的shuffle函数,但是这个函数会把数组的键清空建立新的键,那么我们若想保留键只需要利用shuffle函数再做一下处理就可以了.可以自定义一 ...
- VirtualBox piix4_smbus Error
VirtualBox piix4_smbus Error VirtualBox 3.2.10 gives me the following error message when booting U ...
- (转载)MongoingDB常用操作
mongo –path db.AddUser(username,password) 添加用户 db.auth(usrename,password) 设置数据库连接验证 db.cloneDat ...
- 函数式functor的理解
// 参考 // http://jiyinyiyong.github.io/monads-in-pictures/ // https://llh911001.gitbooks.io/mostly-ad ...
- jsp发布:tomcat+花生壳
1.tomcat/conf/server.xml <Host name="localhost" appBase="webapps" unpackWARs= ...
- FFmpeg官方文档之————先进音频编码(AAC)
先进音频编码(AAC)的后继格式到MP3,和以MPEG-4部分3(ISO / IEC 14496-3)被定义.它通常用于MP4容器格式; 对于音乐,通常使用.m4a扩展名.第二最常见的用途是在MKV( ...
- MFC编程入门之二十三(常用控件:按钮控件的编程实例)
上一节讲了按钮控件Button.Radio Button和Check Box的基本用法,本节继续讲按钮控件的内容,通过一个实例让大家更清楚按钮控件在实际的软件开发中如何使用. 因为Button控件在前 ...
- 14TH本周工作量及进度统计
14TH本周工作量及进度统计 本周psp: C(类别) C(内容) S(开始时间) ST(结束时间) I(中断时间) T(实际时间) 活动 本周会议 1 ...