zoukankan      html  css  js  c++  java
  • Swift入门篇-结构体

    前面主要是介绍swift语言中基本类型的用法,今天给大家介绍的是swift的结构体的用法,swift中结构体的用法和其他语言的用法,还有不太一样,不过您多敲几遍,就可以理解结构体,结构体在ios开发中是灰常重要的一部分,如果您很好的掌握结构体,在后面ios开发中,会理解的更加清楚。

    一:结构体声明

    格式:
    
    struct  结构体名 {
    
    }
    
    说明:
    
    1struct  是定义结构体的关键字

    例子

    /*
    
    1:struct 是结构体的关键字
    
    2:student 结构体名称
    
    3:student()  创建一个结构体变量
    */
    
    struct  student {
      
    }
    
    
    var stu = student () //student() 表示创建一个结构体变量

    二 :结构体声明 字段

    定义结构体字段2种方法
    
     struct  结构体名 {
    
    
     第一种直接定义字段名 并且给字段名赋初始值
    
        var 或 let  字段名 = 初始化值
    
     第二种定义字段名并且指定字段类型
    
        var 或 let  字段名:类型
    
    }

    例子

    struct  student {
        
        var  age = 0 //直接定义一个字段名称,并且给字段名赋初始值
        
        var  name:String // 直接定义一个字符串字段name。
        
    }

    三 :结构体声明 字段的访问


    一: 创建结构体变量,结构体的字段都必须有初始值,否则会报错

    二: 结构体内部 只有在构造函数(init)中修改字段的值,在结构体内部中方法和属性内不能直接修改结构体内部字段的值。
    三: 在结构体外部,结构体变量,可以访问结构体字段,也可以修改结构体字段的值。
    ①:构造函数给结构体字段 赋初始值 说明:
    1: swift语言中指定结构体构造函数,是init方法 2:init执行方法,在创建结构体变量之前执行

    3:在创建结构体题变量的参数必须和构造函数init 参数必须一致。 ②:创建结构体变量赋初始值

    在创建结构体变量,并且直接赋值给字段,其中注意点 赋初始值的顺序必须和声明结构体的顺序一致。


    例子

    无参构造函数

    struct  student {
        
        var  age = 0 //直接定义一个字段名称,并且赋初始值
        
        var  name:String // 直接定义一个字符串变量。
        
        //定义 无参数构造函数
        init() {
            name = "zs"
            age = 1
        }
        
    
    }
    
    /*
    1:
    student () 创建一个结构体变量 ,系统会自动调用构造函数init()
    */
    var stu = student ()
    println("name=(stu.name),age=(stu.age)") 运行结果 name=zs,age=1

    有参数构造函数

    struct  student {
        
        var  age = 0 //直接定义一个字段名称,并且赋初始值
        
        var  name:String // 直接定义一个字符串变量。
        
        //定义 有参数构造函数
        init(Name:String,Age:Int) {
            self.name = Name //self 指的是当前结构体变量    self.name 当前结构体的变量的字段
            self.age = Age
        }
        
    
    }
    
    /*
    1;student (Name:"ls",Age:12) 创建结构体变量 系统会调动构造函数,并且创建结构体的参数于构造函数参数一致
    2:student (Name:"ls",Age:12) 后面跟着的参数名称必须于构造函数参数变量名相同


    */
    var stu = student (Name:"ls",Age:12) //因为构造函数有2个参数,所对应创建结构体的变量的参数要一致 println("name=(stu.name),age=(stu.age)") 运行结构 name=ls,age=12

    有参数构造函数 参数变量加 _ 用法

    1:  创建结构体的对象中对应参数必须和构造函数对应的参数一致
    
    2: 如果构造函数中参数变量前加 _ 其对应创建对象的参数,不需要变量名
    struct Point{
        var x = 0.0
        var y = 0.0
    
        init(_ x :Double ,_ y :Double){
            self.x = x
            self.y = y
        }
        
    }
    
    /*
    1:     init(_ x :Double ,_ y :Double) 构造函数中对应变量前面加 _ 其对应创建对象后面不需要变量名。
    
    */
    
    
    var p = Point(10.0,11.0)
    
    println("x=(p.x) y=(p.y)")



    创建结构体变量赋初始值

    struct  student {
        
        var  age = 0  //直接定义一个字段名称,并且赋初始值
        
        var  name:String?  // 直接定义一个字符串变量。
        
       
        
    
    }
    /*------创建结构体变量赋初始值
    
    var stu = student(age:12,name:"甘超波")
    说明:
     1:创建一个结构体变量stu,其中字段 age 的值为12  name 的值为 "甘超波"
    
     注意点:
        student()括号后面跟着参数 必须和定义结构体的字段的顺序一致
    
      错误写法
    
      var  stu1 = student(name:"甘超波",age:12) 
      因为 创建结构体的变量中初始化字段的顺序和定义结构体声明字段的顺序不一致
    
    */
    
    
    var stu = student(age:12,name:"甘超波")
    
    println("name=(stu.name),age=(stu.age)")
    
    运行结果
    
    name=甘超波,age=12

    结构体 方法

      1:结构体中可以直接存储方法
    
     注意点: 结构体中方法不能直接修改字段的值,否则会报错

    例子

    struct  student {
        
        var  age = 0  //直接定义一个字段名称,并且赋初始值
        
        
        //定义结构体方法
        func GetAge() ->Int{
            return age
        }
        
        
    
    }
    
    /*
    注意点: 结构体中方法不能直接修改字段的值,否则会报错
    */
    
    var stu = student()
    stu.age = 12
    
    println(stu.age)
    
    运行结果
    
    12

    结构体属性

    属性 主要是get set方法

    例子

    struct Point{
        var x = 0.0
        var y = 0.0
    
    
    }
    
    
    
    struct  CPoint {
        
        var p = Point()
        
        
        //声明属性 ,get set方法
        var GPoint :Point{
        get{
            return p
        }
        set(newPoint){
            p.x = newPoint.x
            p.y = newPoint.y
        }
        
        }
    }
    
    var p = Point(x:10.0,y:11.0)
    
    var CP = CPoint()
    CP.GPoint = p
    
    println("x=(CP.GPoint.x),y=(CP.GPoint.y)")
    
    运行结果
    x=10.0,y=11.0

     系统提供常见结构体 有 Bool  Int Float Double  String 等 

     注意点:SWift语言中 String 是结构体类型

    结构体值传递的时候都是

    后面的文章,我回陆续把我学习到swift语言的知识写出来形成一个系列。由于是新语言,难免有不足,欢迎给我提出意见。也可以加我QQ 1436051108一起讨论,如果您有什么问题,也可以直接在QQ留言发给我,我看到之后第一时间回复您

      最后总结一下。送上一直思维导图,作为文章的结束

     

  • 相关阅读:
    POJ 2251 Dungeon Master(BFS)
    POJ 1321 棋盘问题 (DFS + 回溯)
    POJ 3009 Curling 2.0(DFS + 模拟)
    Codeforces 702D Road to Post Office(模拟 + 公式推导)
    Codeforces 702A Maximum Increase(dp)
    Codeforces 702C Cellular Network(二分)
    Codeforces 702B Powers of Two
    POJ 3083 Children of the Candy Corn (DFS + BFS + 模拟)
    POJ 2488 A Knight's Journey (回溯法 | DFS)
    POJ1094 Sorting It All Out (拓扑排序)
  • 原文地址:https://www.cnblogs.com/gcb999/p/3810188.html
Copyright © 2011-2022 走看看