swift枚举 分支结构 函数 结构体 类

枚举

// swift中的枚举值,描述的不仅仅是无符号整型值,可以是符合swift的各种数据类型,比如字符型,浮点型等等。

enum Season {

    case Spring
    case Summer
    case Autumn
    case Winter
}

var s = Season.Spring

print(s)

enum TheEightDiagrams:String {
case 乾 = "天"
case 坤 = "地"
case 巽 = "风"//(xun)
case 震 = "雷"
case 坎 = "水"
case 离 = "火"
case 艮 = "山"//(gen)
case 兑 = "泽"
}

// 可变枚举变量

var diagram = TheEightDiagrams.坤

// 枚举值打印

print(diagram)  // 结果:坤

// 枚举值所代表的值

print(diagram.rawValue)  // 结果:地

分支结构

// if

if diagram.rawValue == "地" {

    print("拣尽寒枝不肯栖,寂寞沙洲冷")
}

let number = 10
if number > 20 {

    print("这个数比20大")
}else if number < 15 {

    print("这个数比15小")
}else {

    print("我也不知道了......")
}

// switch...case
// ①switch观察的量可以是任意类型,包括但不限于数值型
// ②swift中switch语句的特点:默认不贯穿(自带break),要求罗列的每一种情况都要有处理语句,default要书写并做处理。

switch diagram.rawValue {

    case "天":
        print("天行健,君子以自强不息")
    case "地":
        print("地势坤,君子以厚德载物")
    case "风":
        print("风好大")
    default:
        print("此卦无解......")
}

var rect = (20,30)
switch rect{

    case (20,_):
        print("case1")
        fallthrough // 人为贯穿
    case (_,30):
        print("case2")
        fallthrough
    case (_,_):
        print("case3")
        fallthrough
    case (_,40):
        print("case4")
        fallthrough
    default:
        print("其他情况")
}

var num = 89757
switch num{
    // 在条件语句中,当where后面的语句满足条件时,前面的变量会被定义,并且可以使用(在保持原值不改变的情况下,可以使用新的量来替代原值参与计算)
case var a where num > 4096 :
    
    a += 10
    
    print(a)
    
    fallthrough
default:
    print(num)
}

函数

// 1.无参无返回值

func test1()->Void{

    print("相顾无言,唯有泪千行")
}

test1()

// 2.无参有返回值

func test2()->String{

    return "太上老君急急如律令"
}

print(test2())

// 3.有参无返回值
// nameArray 外部参数:用于告知外界参数描述(可以为汉字)
// names 内部参数:函数内部使用的参数

func test3(nameArray names:Array<String>){

    for name in names{
        print(name)
    }
}

let names = ["鑫","森","淼","焱","垚"]//(miao,yan,yao)
test3(nameArray: names)

// 4.有参有返回值
// 注意,在函数拥有多个参数前提下,从第二个开始,将默认变成外部参数,若想改变这一点,需要使用"_"来修饰以后的参数

func num(num1:Int,_ num2:Int) -> Int{

    return num1 * num2
}
print(num(12345679, 8))

// 练习->斐波那契数列:1,1,2,3,5,8,13,21,34,56

func numberFor(需要计算的第几个数 count:Int) -> Int{
    if count < 3{

        return 1
    }else{

        return numberFor(需要计算的第几个数: (count - 1)) + numberFor(需要计算的第几个数: (count - 2))
    }
}
print(numberFor(需要计算的第几个数: 10))


func arrayFor(斐波那契额数列的个数 count:Int) -> Array<Int>{

    var array = Array<Int>()
    for i in 1...count{

        array.append(numberFor(需要计算的第几个数: i))
    }
    return array
}

print(arrayFor(斐波那契额数列的个数: 20))

// 有参多个返回值(返回值为元组)

func test4(name:String) -> (name:String,age:Int,score:Float){

    return(name:"马泽坤",age:19,score:59.9)
}
print(test4(""))

// 练习 阶乘

func factorial(number n:Int) -> Int{

    if n == 1 {

        return 1
    }else{

        return n * factorial(number: n - 1)
    }
}
print(factorial(number: 5))


var a = 10, b = 11

// 补存点:
// ①默认内部参数使用let修饰,无法对参数本身进行修改
// ②若需要通过函数来修改外部变量的值,需要使用inout修饰(本质上是量的地址传递)

func exchange(inout a:Int,inout _ b:Int){

    var temp = 0
    temp = a
    a = b
    b = temp
}
exchange(&a, &b)
print("a = \(a),b = \(b)")

// 必须有值才能解包,实际开发中写if
// 可选类型,可以不给初始值,但解包才可以获取其表示的值

var x:String?
x = "xxx"
print(x!)

// !表示强制解包,若值为空时,解包会崩溃,所以必须在确定其有值的前提下解包
// 可选绑定,可以不给初始值,不需要解包,若值为空时,一样会崩溃,所以必须在确定其有值的前提下获取值

var y:String!
y = "yyy"
print(y)

结构体

struct Point{
    var x:Float?
    var y:Float?
}
var p1 = Point(x:100,y:200)
print(p1.x!)


struct Size {
    var width:Float?
    var height:Float?
}


struct Frame {
    var point:Point?
    var size:Size?
    // 计算属性
    var centerX:Float{

        get{
            return (point?.x)! + (size?.width)!/2
        }    
    }
}

var frame = Frame(point: Point(x:100,y:100), size:Size(width:100,height:100))
print(frame.centerX)



struct Person {
    // 结构体的成员变量(相当于类的实例变量)
    var name:String
    var age:Int
    var gender:String
    // 结构体成员变量方法(相当于类的实例方法)
    func sayHi(){
        print("你好,你见过这么大的月亮么?")
    }
    // 结构体属性
    static var soul:String?
    // 结构体方法
    static func think(){

        print("t将来的你会感谢现在奋斗的自己!")
    }

    // 计算属性:本身作为一个属性,并无实际意义,但可以进行对成员变量的取值和赋值等操作
    var value:String{
        // 类似于setter方法
        set{
            // 给name赋值
            name = newValue// 代指外界赋的新值
        }
        // 类似于getter方法
        get{
            // 返回name
            return name
        }
    }
}

// 创建结构体变量

var person1 = Person(name: "雷文豪", age: 15, gender:"?")

// 对结构体变量单独赋值

person1.gender = "!"

// 调用实例方法

person1.sayHi()

// 使用计算属性赋值(相当于给name赋值)

person1.value = "岳桂庆"

// 使用计算属性取值(相当于向name取值)

print(person1.value)

// 结构体属性赋值

Person.soul = "如果要求唯有循规蹈矩的、道德上四平八稳的灵魂才能在艺术中表现自己"

// 结构体方法调用

Person.think()

class Animal{
    // 实例变量
    var name:String?
    var age:Int?
    var gender:String?
    // 实例方法
    func calculation(){

        print("小动物学画画")
    }

    // 类属性
    static var hair:Bool?
    // 类方法
    // 使用static修饰的类方法,子类不可以重写
    // 使用class修饰的类方法,子类可以重写
    class func drink(){
        print("动物都爱喝好喝的")
    }

    // 初始化方法(自定义)
    // ①当前类为根类时,不需要向super发送消息
    // ②默认初始化方法无参数,自定义初始化方法可以自己书写参数,但是两者在书写时都没有返回值
    init(name:String,age:Int,gender:String){

        self.name = name
        self.age = age
        self.gender = gender

    }
}

class Cat: Animal {
    // 子类扩充的实例变量
    var color:String?

    // 子类的初始化方法
    init(name: String, age: Int, gender: String, color: String) {
        // 向父类发送消息,让父类初始化公共的实例变量
        super.init(name: name, age: age, gender: gender)
        // 子类单独初始化独有的实例变量
       self.color = color
    }

    // 覆写父类的方法
    // 覆写实例方法
    override func calculation() {
    
        super.calculation() // 父类原本的操作
        print("这是一只小猫在计算") // 子类添加的操作
    }
    // 覆写父类方法
    override class func drink(){

        super.drink() // 父类原本的操作
        print("这是一只饥渴的小猫")
    }
}

// 创建一个Animal实例

var animal = Animal(name:"折耳猫",age:2,gender:"M")
var _animal = Animal.init(name: "折耳猫", age: 2, gender: "M")

//animal.name = "折耳猫"
//animal.age = 2
//animal.gender = "M"

// 调用实例方法

animal.calculation()

// 类属性赋值

Animal.hair = true

// 调用类方法

Animal.drink()

// 创建一个Cat的实例

var cat = Cat.init(name: "小猫", age: 1, gender: "M", color: "yellow")
print(cat.name!)

// 子类实例可以继承父类的静态方法和动态方法

cat.calculation()
Cat.drink()

值类型

// 1.简单值类型

var num1:Int = 10
var num2 = num1
num2 = 20
print(num1)

// 2.构造值类型

var point1 = Point(x: 20, y: 20)
var point2 = point1
point2 = Point(x: 30, y: 30)
print(point1)

// 引用类型:在进行复制的传递时,为了节省资源,或者保证访问统一资源,指向了同一内存区域(类似于浅拷贝)

var animal1 = Animal.init(name: "蛇", age: 10, gender: "安能辨你是雌雄")
var animal2 = animal1
animal2.name = "猴"
print(animal1.name)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容