Swift的结构体,枚举,可选Optional,可选链

//: Playground - noun: a place where people can play

import Cocoa

var str0 = "Hello, playground"

//类是引用类型,结构体与枚举是值类型

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

struct Point {

var x = 0

var y = 1

//结构体的的方法

//为了能够在实例方法中修改属性值,可以在方法定义前添加关键字mutating

mutating func change (newX: Int,newY: Int) {

x = newX

y = newY

}

}

var p = Point()

p.change(1, newY: 2)

p.x

p.y

//自动帮你添加一个包含所有成员的初始化器,memberwise init

var p2 = Point(x: 5, y: 6)

p2.x

let p3 = Point()

//p3 = Point() 报错,let定义的p3是常量指针

//p3.x =20 struct是个值类型,所以也报错

//**************枚举************

enum Gender {

case Male

case Female

}

//枚举的使用

let ch: Gender = .Male

//也可以这样定义

//let ch2 = Gender.Male

switch ch {

case .Male:

print("男")

case .Female:

print("女")

}

//*************枚举的关联值*********

enum Gender2 {

case Male(String)

case Female(Int,String)//()里面可以关联任意类型,每个case关联的数据都可以不一样

}

let ch3 = Gender2.Male("男")

switch ch3 {

case.Male(let c):

print("性别是\(c)")

case.Female:

print("性别女")

}

let cx = Gender2.Female(11,"女")

switch cx {

case.Male(let c):

print("性别\(c)")

//case.Female(let c,let x):

case let.Female(c,x)://这里如果c,x都是let的话,可以这样定义

print("性别\(x),年龄\(c)")

}

//************枚举的原生值***********

//原生值,如果你不给它赋值的话,它默认是从0开始的,就想下面的x = 1,因为是默认从0 开始,那Approved就等于 1,那样违背了原生值得唯一性,所以出错。假设x = 3,那后面的y就会等于4,如果还有case,就5,6,7,8...一直这样下去

enum Status :Int {//所有的原生值都得是唯一的

case UnApproved

case Approved

case x = 3//x = 1就报错

case y

}

let s = Status.x

s.rawValue

let s2 = Status.y

s2.rawValue

s2.hashValue //显示上一个case的原生值

//可选的Optional

var str: String? = "chenhe"//加?后str是一个可以设置nil的String

//str = nil;

let i: Int?//加?后不给它赋值,默认就是nil

str?.startIndex//取出nil值

//str.startIndex 会报错,因为此时的str不是一个真正的String类型,所以没有startIndex

//遇到这种情况,有两种方法解决Optional问题

//第一种

str!.startIndex

str!

//第二种

if let s = str {

print("\(s)")

}else {

print("str值是nil")

}

//简便写法

var str2: String! = "chenxuan" //隐式解封

str2 = nil

//当str2赋值了nil时,str2!输出值为nil,没有赋值nil则输出字符串内容

//****************optional chain 可选链******************

//多级别可选链

class Person {

var ci:ClassInfo?

}

class ClassInfo {

var t:Teacher?

}

class Teacher {

var name = "cj"

}

var p0 = Person()

var ci = ClassInfo()

var t = Teacher()

p0.ci = ci

ci.t = t

p0.ci?.t?.name = "chenhe"

p0.ci?.t?.name

p0.ci!.t!.name

if let n = p0.ci?.t?.name { //也可以用可选绑定

print("\(n)")

}

时间: 2024-11-08 18:59:03

Swift的结构体,枚举,可选Optional,可选链的相关文章

OC基础--结构体 枚举做类成员属性

结构体  枚举作类的成员属性: 定义一个学生类 性别 -- 枚举 生日 入学日期  毕业日期  --  结构体 代码示例: 声明文件 Student.h: #import <Foundation/Foundation.h> typedef struct { int year; int month; int day; } Date; typedef enum { kGenderGirl = 0, kGenderBoy = 1, kGenderChunGe = 2 } Gender; @inter

结构体 枚举类型

结构体 class Program { struct student { public int num; public string name; public string sex; public one oone; public int[] qq; } struct one { public string aa; public int bb; } static void Main(string[] args) { ////struct ////初始化结构体 //student stu = ne

C# 结构体 枚举类型

结构体主要用于创建小型对象,例如   对象:学生  他包含:学号 姓名  性别  生日 班级   成绩等多个再小的对象 当我们有成千上万个对象组合起来   容易会自己造成混乱 而且占一定的内存 结构体就是把一个对象分支多个对象  组合起来进行计算 运行  并且不会重复运用同一个程序  把内存节省 定义: 它一般定义在Main函数外面,类Class program里面 格式: struct+结构体名称 { public   int 变量名; public   string   变量名; publi

9.3 结构体 枚举 typedef

对结构体内存清零: #include <stdio.h> #include <string.h> struct STU { int id; char sex; }; int main() { struct STU s1; memset(&s1 , 0 , sizeof(s1)); } 结构体内存对齐: 以结构体最长的类型对齐 #include <stdio.h> #include <string.h> struct STU { char sex; i

C 碎片八 结构体&amp;枚举&amp;联合

一.结构体 1, 结构体定义 结构体类型的定义:任意数据类型变量的集合,用于描述一个具体的事物的信息.在C语言中描述一件事物一般都是用结构体 声明结构体类型的格式: struct  结构体名 {成员列表}: 一般形式: //结构体定义一般形式 struct 结构体名 { 成员变量1; //成员变量后面是';' 成员变量2; .... }; //这里最后加';' 不能省略 例: struct Student { char name[30]; int age; double score; }; 说明

C#基础 结构体 枚举类型

结构体:就是一个自定义的集合,里面可以放各种类型的元素,用法大体跟集合一样. 一.定义的例子: struct student { public int nianling; public int fenshu; public string name; public string sex; public int sum; } 以上的语句就是定义一个名称为student的结构体,其中包含int类型的年龄.分数.总和,和string类型的姓名.性别. 二.用法: 在main主函数外面定义了一个名称为st

Swift 的 结构体

Swift 结构体是构建代码所用的一种通用且灵活的构造体. 我们可以为结构体定义属性(常量.变量)和添加方法,从而扩展结构体的功能. 与 C 和 Objective C 不同的是: 结构体不需要包含实现文件和接口. 结构体允许我们创建一个单一文件,且系统会自动生成面向其它代码的外部接口. 结构体总是通过被复制的方式在代码中传递,因此它的值是不可修改的. 语法 我们通过关键字 struct 来定义结构体: struct nameStruct { Definition 1 Definition 2

C89:论结构体/枚举体/联合体的使用

一.Struct 1.struct的作用 一般用在多种不同数据类型集合里面,便于代码整洁,用于封装便于再次利用 struct默认是public,class默认是private 2.struct的使用 1.有结构名 struct A{ ... }; Struct A a; 2.有结构名和结构对象 struct A{ ... }O; Struct A a; 3.只有结构对象 struct{ ... }O,Array[100],*pO,; //struct不能调用自身的对象,只能使用引用和指针指向自身

结构体枚举类型

结构体 结构体类型是用户自己定义的一种类型,它是由其他类型组合而成的,可包含构造函数.常数.字段.方法.属性.索引器.运算符.事件和嵌套类型的值类型.结构在几个重要方面不同于类:结构为值类型而不是引用类型,并且结构不支持继承. 用结构的主要思想是创建小型的对象,如Point和FileInfo等等.这可以节省内存,因为没有如类对象所需的那样有额外的引用产生.例如,当声明汉语成千上万个对象的数组时,这会引起极大的差异. 结构体是一个变量组,将一组变量放在一起,其实就是一个自定义的集合,里面可以包含各