开发者社区> yungfan> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

17.Swift学习之类

简介: 类介绍 Swift虽然推荐面向协议编程,但其也是一门面向对象开发的语言 面向对象的基础是类,类产生了对象(类的实例) Swift中用class关键字定义类 定义语法 class 类名 { // 定义属性和方法 } 举例 class ...
+关注继续查看

类介绍

  • Swift虽然推荐面向协议编程,但其也是一门面向对象开发的语言
  • 面向对象的基础是类,类产生了对象(类的实例)
  • Swift中用class关键字定义类

定义语法

class 类名  {
    // 定义属性和方法
}
  • 举例
class Person {
    var name = "Zhangsan"
    var age = 10
    var sex = "man"
    func say(){
        print("人会说话")
    }
}
  • 解读
    • 定义了一个名叫 Person的类
    • 这个类有三个变量存储属性和一个方法

类的实例

  • 结构体一样,最简单的是在名称后面加一个(),但默认没有成员构造函数
var p1 = Person()

访问属性和方法

  • 可以用.来访问一个实例的属性和方法
  • 访问时如果使用了赋值语句就是设置属性
//普通构造函数
var p1 = Person()
//访问
p1.age
//设置
p1.age = 30
p1.name
p1.sex
p1.say()

类是引用类型

  • 不同于值类型,引用类型被赋值到一个常量,变量或者本身被传递到一个函数的时候它是不会被拷贝的,而使用的是同一个对某个实例的引用。
var p2 = p1
p2.name = "Lisi"
p2.age = 20
p2.sex = "woman"
//对p2的修改会影响原来的p1
p1.age
p1.name
p1.sex

特征运算符

  • 因为类是引用类型,可能有很多常量和变量都是引用到了同一个类的实例。有时候需要找出两个常量或者变量是否引用自同一个实例,Swift提供了两个特征运算符来检查两个常量或者变量是否引用相同的实例。
    • 相同于 ( ===)
    • 不同于( !==)
//特征运算符
let p3 = Person()
p1 === p2 //true
p1 === p3 //false
p1 !== p3 //true

继承

  • 一个类可以从另一个类继承方法、属性和其他的特性
  • 当一个类从另一个类继承的时,继承的类就是子类,被继承的就是父类
  • 继承的目的是为了代码复用 Do Not Repeat Yourself
  • 案例
// 定义一个父类
class Vehicle {
    var currentSpeed = 0.0
    func makeNoise() {
        print("Ba Ba")        
    }
}

// 定义一个子类
class Bicycle: Vehicle {
    var hasBasket = false
}

// 定义一个子类
class Car: Vehicle {
    var banner = "皖B12345"
}

var vehicle = Vehicle()
vehicle.makeNoise()
let bicycle = Bicycle()
bicycle.makeNoise()
var car = Car()
car.makeNoise()

重写(覆写)

  • 所谓重写就是子类可以对继承自父类实例方法、类型方法、实例属性,类型属性进行覆盖
  • 重写需要在前面加上 override 关键字
  • override 关键字执行时Swift 编译器会检查重写的类的父类(或者父类的父类)是否有与之匹配的声明来提供重写
class Car: Vehicle {
    var banner = "皖B12345"  
    override func makeNoise() {
        print("Di Di")
    }
}
var car = Car()
car.makeNoise()
  • 防止被重写
    • 可以通过final标记阻止这种行为:final var , final func , final class func
class Vehicle {
    var currentSpeed = 0.0
    func makeNoise() {
        print("Ba Ba")
    }   
    //不能被子类重写
    final func run() {
        print("Run Run")
    }
}

类与结构体的对比

  • 相同点
    • 定义属性
    • 定义方法
    • 定义构造函数(init函数)
    • 可以被扩展
    • 遵循协议
  • 类有而结构体没有的额外功能
    • 继承
    • 类型转换(子类 as 父类)
    • 析构函数
    • 引用计数

开发中类与结构体的使用场景

  • 类和结构体都可以用来定义自定义的数据类型,结构体实例总是通过值来传递,而类实例总是通过引用来传递。
  • 按照通用准则,当符合以下一条或多条情形时应考虑结构体,其他情况下,使用类。大部分的自定义的数据结构应该是类,而不是结构体。
    • 要描述的数据类型中只有少量的简单数据类型的属性
    • 要描述的数据类型在数据传递时要以复制的方式进行
    • 要描述的数据类型中所有的属性在进行传递时需要以复制的方式进行
    • 不需要继承另一个数据类型
  • 比如:
    • 定义几何形状的大小,封装了一个 width属性和 height属性,两者为 Double类型;
    • 定义一定范围的路径,封装了一个 start属性和 length属性,两者为 Int类型;
    • 定义三维坐标系的一个点,封装了 x , y 和 z属性,它们是 Double类型。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《从零开始学Swift》学习笔记(Day 41)——类的继承
<span style="font-family:宋体;font-size: 10.5pt; mso-ascii-font-family: Arial; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Arial; mso-bidi-font-family: A
1245 0
详解 WWDC 20 SwiftUI 的重大改变及核心优势
随着 WWDC 20 相关新特性和介绍视频的释出,都明确的宣告着 SwiftUI 元年已经到了,SwiftUI 已经成长为新时代的布局引擎。 以下从几个方面分享关于 SwiftUI 的重大改变及核心优势。
2382 0
SwiftUI 面面观
前言 Swift 5.1 新语法 单表达式隐式返回值 根据结构体默认成员合成默认初始化器 字符串插入运算符新设计 属性包装器 不透明返回类型 Swift Style DSL / Function Builder 其他新特性 Swift 从 3.x Attribute Swift/SwiftUI API Design Guide 值类型和引用类型
1251 0
SwiftUI 初体验
前言 苹果在 WWDC 2019 的开幕式中给我们来带了超多的惊喜,全新的iPad OS, 给生产力和商业带来了新领域,iOS 项目可以通过简单的修改移植到 Mac OS 上,全新的 Mac Pro 高清的显示器等新硬件,但对于在苹果平台的开发者们,最重要的莫过于 Swift UI。
5393 0
16.Swift学习之结构体
结构体的介绍 概念介绍 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合 结构体是值类型 结构体既可以定义属性又可以定义方法 定义语法 struct 结构体名称 { // 属性和方法 } 举例 stru...
802 0
3.Swift学习之常量&变量
什么是常量和变量 在Swift中规定:在定义一个标识符时必须明确说明该标识符是一个常量还是变量 使用let来定义常量,定义之后不可以修改 使用var来定义变量,定义之后可以修改 变量的基本使用 import UIKit let a : Int =...
870 0
8.Swift学习之字符串
字符串的介绍 字符串在开发中使用得非常频繁 OC和Swift中字符串的区别 在OC中字符串类型是NSString,在Swift中字符串类型是String OC中字符串@"",Swift中字符串"" 使用 String 的原因 String...
794 0
+关注
yungfan
中国&middot;芜湖 80后&middot;理工男 软件开发工程师 移动应用开发专业教师 技术方向:iOS、Android、Java
98
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载