设为首页 加入收藏

TOP

构造方法 (1)(一)
2017-10-10 12:13:59 】 浏览:8471
Tags:构造 方法

/*

 构造方法:

 

 作用: 对实例对象的内容进行初始化

 Swift要求类或者结构体中的存储属性(非lazy在)在对象构造完毕后要有初始化值

 

 语法:

 init(参数列表){ 初始化代码 }

 

 注意: 1.在Swift中类/结果提/枚举都需要构造方法;

 2.构造方法的作用仅仅是用语初始化属性, 而不是分配内容, 分配内存是系统帮我们做的;

 3.构造方法是隐式调用的, 通过 类名称() 形成创建一个对象就会隐式调用 init() 构造方法;

 4.如果所有的存储属性都有默认值, 可以不提供构造方法, 系统会提供一个隐式的构造方法;

 5.如果存储属性可以提供缺省, 那么提倡大家使用设置缺省值的方法, 这样可以简化代码(不用自定义构造方法, 不用写存储属性类型)

 */

 

class Person {

    var name: String = "hjq"

//    var age: Int = 20

    var age:Int

    func description() -> String {

        return "name = \(name) age = \(age)"

    }

    init() {

        print("init")

        age = 30

    }

}

// 1.分配内存; 2.初始化name和age; 3.构造方法是隐式调用的

var p = Person()

var descripString: String = p.description() //显示调用

print(p.age)

 

print("================================")

 

 

/** 带有参数的构造方法 **/

class Person2 {

    var name:String

    var age:Int

    func description() -> String {

        return "name = \(name) age = \(age)"

    }

    //1.构造方法的内部参数, 默认也是外部参数;

    //2.而函数的内部参数默认不会当做外部参数;

    //3.而方法的内部参数, 从第二个开始才会当做外部参数;

    //4.构造方法对属性的顺序没有要求, 只要保证对象构造完时所有存储属性被初始化即可.

    init(age:Int, name:String)

    {

        self.name = name

        self.age = age

    }

    func setName(name:String, age:Int)

    {

        self.name = name

        self.age = age

    }

}

var p2 = Person2(age: 25, name: "hjq")

p2.setName(name: "hjq", age: 30)

print(p2.description())

 

p2.setName(name: "hjq", age: 23)

print(p2.description())

 

print("================================")

 

/*

 常量存储属性与构造方法

 常量存储属性只能通过缺省值或在构造方法中被修改, 其它任何地方都不能修改

 */

class Person3 {

    var name:String = "hjq"

    var age:Int

    init(age:Int, name:String)

    {

        self.name = name

        self.age = age

    }

    func description() -> String {

        return "name = \(name) age = \(age)"

    }

}

var p3 = Person3(age: 30, name: "jq")

print(p3.description())

//p3.name = "hello" //常量存储属性初始化之后不允许被修改! 虽没报错,但是不允许,这一点在后面开发中挖掘验证!

 

 

print("================================")

 

/** 可选属性与构造方法 **/

 

class Car {

    let name:String

    init(name:String)

    {

        self.name = name

    }

}

class Person4 {

    let name:String

    var age:Int

    var car:Car?

    

    //1.可选值存储属性可以不再构造方法中初始化;

    //2.也就是说可选值在对象构造完毕后不用初始化;

    //3.其实如果不对可选存储属性进行初始化, 默认就是nil

    init(age:Int, name:String)

    {

        self.age = age

        self.name = name

    }

 

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇析构方法 deinit 下一篇类方法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目