Object-C--->Swift之(八)类和结构体

简介: 在Swift中类和结构体有高度的相似性。二者主要区别是: 1. 结构体不支持继承 2. 结构体不支持定义析构器 3. 结构体是值类型,而类是引用类型定义类语法格式:[修饰符]class 类名{零个到多个构造器零个到多个属性零个到多个方法零个到多个下标}对一个类定义而言,包括3种最常见的成员:构造器、属性、方法,如果程序员没有为一个类提供构造器,则系统会为该类提供一个默认、无参数的构造器。

在Swift中类和结构体有高度的相似性。二者主要区别是:
1. 结构体不支持继承
2. 结构体不支持定义析构器
3. 结构体是值类型,而类是引用类型

定义类语法格式:

[修饰符]class 类名
{
零个到多个构造器
零个到多个属性
零个到多个方法
零个到多个下标
}

对一个类定义而言,包括3种最常见的成员:构造器、属性、方法,如果程序员没有为一个类提供构造器,则系统会为该类提供一个默认、无参数的构造器。一旦程序员为该类提供了构造器,则系统不会再为该类提供默认的构造器。

#定义结构体语法格式:

[修饰符]struct 结构体名
{
零个到多个构造器
零个到多个属性
零个到多个方法
零个到多个下标
}

结构体不能定义final,因为结构体不支持继承。如果程序员没有为结构体提供构造器,系统则会为该结构体提供两个构造器:一个无参数的构造器,一个初始化所有存储属性的构造器。

定义方法的语法如下:

[修饰符]func 方法名(形参列表)-[->返回值类型]
{
//具体功能代码
}

如果想定义类方法可以用class修饰符

class Person
{
var name:String=""
var age:Int=0
func say(content:String)
{
print(content)
}   
}

上面代码中并没有定义构造器,系统将为它提供一个默认的、无参数构造器,但这个默认的构造器不会为存储属性分配初始值,因此必须有程序为这些存储属性指定初始值。
注意:类是引用类型

        var p:Person
        p=Person()
        p.name="六小龄童"
        var p1=p
        p1.name="孙悟空"
        print(p.name)//输出孙悟空

引用类型比较

引用类型有两个运算符==和!==,这两个运算符只能用于引用类型量的比较,当两个引用类型的变量是否指向同一个实例,当两个引用变量指向同一个实例时,==比较得到true,当两个引用变量不指向同一个实例时,!==比较得到true

class Person
{
var name:String=""
var age:Int=0
init(name:String,age:Int)
{
self.name=name
self.age=age
 }
func say(content:String)
{
print(content)
}
}
var p1=Person(name:"孙悟空",age:2100)
var p2=Person(name:"六小龄童",age:48)
print(p1==p2)//输出false
print(p1 !== p2)输出true
var p3=p1
print(p1 == p3)//输出true

接着谈谈结构体吧

struct Monkey
{
var name:String
var age:Int
func say()
{
print("\(name)的年龄为\(age)")
}
 }
 var monkey=Monkey(name:"孙悟空",age:1500)
 print(monkey.name)

上面代码调用了Monkey带的两个参数的构造器中的一个创建实例,结构体默认会创建两个构造器:一个无参的构造器和一个初始化所有存储属性的构造器。
当调用无参构造器时

var monkey=Monkey()
 print(monkey.age)//输出0
相关文章
|
6月前
|
前端开发 Java 编译器
Object c/swift,java,c/c++在32位和64位各个平台上基本数据类型 所占有的字节数
Object c/swift,java,c/c++在32位和64位各个平台上基本数据类型 所占有的字节数
49 0
|
Swift
Swift - pods中导入的Object-C文件在桥接文件中写入找不到的问题
Swift - pods中导入的Object-C文件在桥接文件中写入找不到的问题
152 0
|
存储 Spring Swift
Object-C--->Swift之(十)存储属性
计算属性相当于Object-C的getter、setter合成的属性,在Swift中结构体、类都可以定义计算属性 定义计算属性 [修饰符] var 计算属性名:属性类型{ get{ //getter方法执行体,该方法必须有返回值 } [set(形参名) {...
801 0
|
存储 Swift
Object-C--->Swift之(九)延迟存储属性
Swift引入了一种新的机制–延迟存储属性机制,在第一次被调用时才会被计算初始值的属性,声明时需要使用lazy修饰符。 注意:定义属性时一定得是变量(var),常量是无法使用延迟存储机制。
715 0
|
Swift
Object-C--->Swift之(七)嵌套函数与闭包
嵌套函数 函数分为全局函数和局部函数,前面已经介绍了全局函数,下面介绍下局部函数,定义在函数体内部的函数可以成为嵌套函数。 注意:嵌套函数对外是隐蔽的,只能在其封闭函数内有效,嵌套函数只能在其封闭函数内有效,其封闭函数也可以返回嵌套函数,以便于程序在其他作用域内使用嵌套函数。
750 0
|
网络架构 iOS开发 Swift
Object-C--->Swift之(七)函数重载
是什么是函数重载? 名字相同的函数出现在一起,就构成了函数重载,只要形参列表或者返回值类型不同就行。 判断条件 形参列表、 返回值类型组成、 外部形参名 三者其中一种不一样均可作为函数重载 举例说明 //该函数类型为()->Void fu...
704 0
|
Swift
Object-C--->Swift之(六)函数类型
认识函数类型 每个函数都有特定的函数类型 函数类型是由函数的形参类型、->和返回值类型组成。 例如: func Add(a:Int,b:Int){ ... } 该函数的函数类型为(Int,Int)->Void或者(Int,Int)->() func Add()->Int{ .
588 0
|
安全 Swift C语言
Object-C--->Swift之(四)强大的Switch
Swift依然继承了C和Object的Switch语句,但在原有的基础上进行了改变,使其变得更加强大 任性的case标签: case标签可以紧跟多个值 var score = "C" switch score { case "A...
777 0
Object-C--->Swift之(五)数组和字典
数组 Swift的数组继承了C、Object-C的功能,目前并没有独特的新功能的添加。 声明数组 泛型语法 Array var myArray:Array 简化语法 [类型] var myArray:Array[Int] 创建数组结构体,并将数组赋值 使用Array的构造器创建数组。
1002 0

相关课程

更多
下一篇
无影云桌面