码迷,mamicode.com
首页 > 编程语言 > 详细

Swift基础(类,结构体,函数)

时间:2016-05-13 23:16:25      阅读:319      评论:0      收藏:0      [点我收藏+]

标签:

 

import Foundation

// 创建一个类

class Student {

    // 属性(类的属性必须赋初值,如果不赋值,需要写自定义方法)

    var studentName: String

    var studentAge: Int

 

    // 方法

    func fallInLove(girlName:String) {

    print("\(self.studentName)看上隔壁的\(girlName)")

    }

  

    // 构造方法(自定义init方法)

    init (studentName1:String, studentAge1:Int) {

        // 左边是属性,右边是形参

        self.studentName = studentName1

        self.studentAge = studentAge1

    }  

}

// 实例化一个student

var student = Student(studentName1: "老王", studentAge1: 18)

 

// 访问属性

print("\(student.studentName)的年龄为\(student.studentAge)")

// 设置年龄

student.studentAge = 20

print("\(student.studentName)的年龄为\(student.studentAge)")

// 方法调用(OC中是方括号,swift中是用点语法)

student.fallInLove("如花")

 

/***************** 结构体 ****************/

// 结构体不用自定义init方法,即不用写构造方法,系统会根据属性自动生成

// 类可以继承,结构体不能继承

// 类,如果创建的是let类型,只要属性是var就可以修改

// 结构体,如果创建的是let类型,即使属性是var也是不能修改的

 

// 结构体,首字母大写

struct GirlSTR {

    // 属性

    var girlName:String = "林志玲"

    var girlHeight:Double = 175.5

    

    // 方法

    func togetherAction(boyName:String){

    print("\(self.girlName)和\(boyName)")

    }

}

 

// 实例化一个结构体

var girl = GirlSTR()

// 访问属性

print(girl.girlName)

// 设置属性

girl.girlName = "苍老师"

print(girl.girlName)

// 方法调用

girl.togetherAction("隔壁老王")

 

// 类是引用类型,结构体是值类型

var tempStudent = Student(studentName1: "张三", studentAge1:18)

var tempStudent2 = tempStudent

tempStudent.studentName = "李四"

print("\(tempStudent.studentName)->\(tempStudent2.studentAge)") // 结果为李四->18

 

var tempGirl = GirlSTR()

var tempGirl2 = tempGirl

print("\(tempGirl.girlName)-\(tempGirl2.girlName)") // 结果都为林志玲-林志玲

 

tempGirl2.girlName = "苍老师"

print("\(tempGirl.girlName)-\(tempGirl2.girlName)") // 结果为林志玲-苍老师

 

/****************** 属性 *****************/

 

// 从功能方面分为两种:1.存储属性 2.计算属性

// 从调用方式分两种:1.实例属性 2.类属性

 

// 存储属性(存储我们设置的属性值)

class Animal {

    // 定义一个存储属性

    var animalName:String

    // 如果不想赋初值,也不想在init方法中写,就要把这个属性的类型变为可选类型

    var isSpeaking:Bool?

    

    // 构造方法

    init(animalName:String){

    self.animalName = animalName

    }

    

}

// 实例化

var tempAnimal = Animal(animalName: "米老鼠")

print(tempAnimal.animalName)

print(tempAnimal.isSpeaking)

 

// 计算属性

class Animal2 {

    // 存储属性

    var animalName:String?

    

    // 计算属性(不能直接存储值,有set和get方法)

    var replaceName:String{

        // get方法必须写返回值

        // get方法是必须写的,set方法可以不写,此时属于只读属性

        get {

        return "hello kitty"

        }

        set{

        // newValue是系统变量

        self.animalName = newValue

        }

    }

}

 

var animal2 = Animal2()

// set方法

animal2.replaceName = "唐老鸭"

// get方法

print(animal2.replaceName)

 

 

// 类属性

class Animal3 {

    // 实例属性(存储属性)

    var animalNmae:String?

    

    // 类属性(只能是计算属性)

    class var animalFriend:String {

        get{

        return "Tom"

        }

    }

}

 

// 实例化

var animal3 = Animal3()

// 用实例对象去调用

animal3.animalNmae = "Hello Kitty"

// 类属性,直接用类调用

print(Animal3.animalFriend)

 

// 结构体中的类属性

struct Animal4{

    // 结构体中的类属性 static修饰,可以是存储属性

    static var animal4Name:String = "Hello Kitty"

    

    // 类属性 计算属性

    static var animal4Friend:String{

        get{

            return "TomCat"

        }

    }

}

 

// 调用类属性

print(Animal4.animal4Name)

print(Animal4.animal4Friend)

 

/*************** 方法 *********************/

 

// 方法分为两大类:1.实例方法 2.类方法

class CityInfo {

 

    // 存储属性,实例属性

    var cityName:String?

    var cityTravelPoint:String?

    // 类属性

    class var printCityOtherTravelPoint:String {

        get{

        return "天安门"

        }

    }

    

    // 实例方法

    func printCityTravelPoint(){

        print("\(cityTravelPoint!)是\(cityName!)的景点")

    }

 

    // 类方法只能使用类属性

    class func printCityTravelPoint(travelPoint1 travelPoint1:String, travelPoint2:String) {

        print("\(travelPoint1)-\(travelPoint2)")

    }

}

 

// 实例化

var tempCity = CityInfo()

tempCity.cityName = "北京"

tempCity.cityTravelPoint = "故宫"

 

// 调用实例方法

tempCity.printCityTravelPoint()

 

// 调用类方法

CityInfo.printCityTravelPoint(travelPoint1: "北海", travelPoint2: "长城")

 

// 结构体中的类方法

struct CityInfo2{

    // 存储属性 实例属性

    var cityName2:String?

    var cityPoint2:String?

    

    // 类属性

    static var cityName22:String = "NewYork"

    static var cityPoint22:String = "自由女神像"

    

    // 实例方法(只能使用实例属性)

    func printCityInfo(){

        print("\(cityName2!)的景点有\(cityPoint2!)")

    }

 

    // 类方法(只能使用类属性)

    static func printCityInfo2(){

    print("\(cityName22)的景点有\(cityPoint22)")

    }

}

 

// 调用实例方法

var tempCity1 = CityInfo2(cityName2: "洛阳", cityPoint2: "白马寺")

tempCity1.printCityInfo()

// 调用类方法

CityInfo2.printCityInfo2()

 

 

// 属性观察器(监测属性的变化)

class Iphone{

    var iphoneType = "6Plus"

    var iphoneColor = "Gole"

    var iphonePrice : Int = 6000 {

        willSet{

        print("newValue = \(newValue)")

        }

        didSet{

        print("oldValue = \(oldValue)")

        }

    }

    

}

var tempiPhone = Iphone()

print("\(tempiPhone.iphoneColor)->\(tempiPhone.iphonePrice)")

// 降价

tempiPhone.iphonePrice = 4500

// 涨价

tempiPhone.iphonePrice = 5000

 

/************** 继承 **************/

 

// 父类

class Zombie {

    // 存储属性

    var blood:Int = 10

    

    // 计算属性

    var name:String {

        get {

        return "普通僵尸"

        }

    }

    

    // 方法

    func speaking() {

    print("父类普通僵尸")

    }

}

 

// 子类

class PailZombie:Zombie {

    var tool: String = "铁桶"

 

    // 重写父类方法,前面需加override

    override func speaking() {

        print("子类铁通僵尸")

    }

    

}

 

// 实例化一个父类

var tempZombie = Zombie()

print(tempZombie.blood)

 

// 实例化一个子类

var tempPailZombie = PailZombie()

// 子类继承父类的属性

print(tempPailZombie.blood)

// 子类自己的属性

print(tempPailZombie.tool)

// 子类继承父类的方法

tempPailZombie.speaking()

 

/************** 协议 ****************/

 

// 协议关键字 protocol

@objc protocol MerryDelegate {

    // 必须实现的方法

    func cook()

    // 可选实现的方法

    optional func shopping()

}

 

class Man: MerryDelegate {

    var name:String?

    // 代理方法

    @objc func cook() {

        print("今天我做饭")

    }

}

 

// 实例化一个对象

var tempMan = Man()

tempMan.name = "小明"

 

// 执行代理方法

tempMan.cook()

 

 

/***************** 延展 ***************/

 

// 延展可以扩充协议中的方法

extension Man {

    func shopping() {

        print("清空购物车")

    }

}

// 执行的是延展中的方法

tempMan.shopping()

 

// 延展可以扩充类中的方法

extension Man {

    func travel () {

        print("周末去旅游")

    }

}

// 执行延展类中的方法

tempMan.travel()

 

/*************** 闭包(相当于block) ****************/

 

// 定义一个闭包 in的前面是参数列表和返回值,后面是要执行的block块

var block = { (str:String)->Void in

print("block = \(str)")

}

 

// 调用

block("万万没想到")

 

Swift基础(类,结构体,函数)

标签:

原文地址:http://www.cnblogs.com/Mr-zyh/p/5491308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!