Swift学习笔记笔记(五) Swift扩展协议类
创始人
2024-01-17 01:35:01
0

一、 实验目的:

1.掌握Swift扩展型
2.掌握Swift协议
3.掌握Swift类

二、实验原理:

1.Swift扩展的定义
2.Swift协议的定义
3.Swift类的定义

三、实验步骤及内容:

1.方法

//实例方法
class Website {
var visitCount = 0
func visiting(){
visitCount += 1
}
}
let sina = Website()
sina.visitCount
sina.visiting()
sina.visitCount
sina.visiting()
sina.visitCount
//带参数的方法
class Website {
var visitCount = 0
var visitor = String
var visitDate = “”
func visiting(visitor: String, visitDate : String){
visitCount += 1
self.visitor.append(visitor)
self.visitDate = visitDate
}
}
let sina = Website()
sina.visiting(visitor: “Tommy”, visitDate: “2016-6-1”)
sina.visitCount
sina.visitor
sina.visitDate
//类型方法
class Website {
static var visitCount = 0
static var visitor = String
static var visitDate = “”
static func visiting(visitor:String, visitDate : String){
visitCount += 1
self.visitor.append(visitor)
self.visitDate = visitDate
}
}
Website.visiting(visitor:“Tommy”, visitDate: “2016-6-1”)
Website.visitCount
Website.visitor
Website.visitDate
//结构体可变方法
struct Website {
var visitCount = 0
mutating func visiting() {
visitCount += 1
}
}
var sohu = Website()
sohu.visiting()
print(“(sohu.visitCount)”)
//下标方法
class Website {
var visitCount = 0
var visitor = String
var visitDate = “”
func visiting(visitor:String, visitDate : String){
visitCount += 1
self.visitor.append(visitor)
self.visitDate = visitDate
}
subscript(index : Int) -> String {
get {
return visitor[index]
}
set {
visitor[index] = newValue
}
}
}
var sina = Website()
sina.visiting(visitor: “Tom”, visitDate: “2016-6-3”)
sina.visiting(visitor: “Sam”, visitDate: “2016-6-9”)
print(“(sina[0])”)
sina[1] = “Pennie”
print(“(sina[1])”)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.类

//基类
class Student {
var name = “”
var age = 0
var id = “”
var basicInfo : String {
return “(name) is (age) years old, the id is (id”
}
func chooseClass(){
print(“(name) choose a class.”)
}
func haveClass(){
print(“(name) have a class.”)
}
}
let theStudent = Student()
theStudent.name = “Tommy”
theStudent.age = 19
theStudent.id = “37060115”
print(theStudent.basicInfo)
//子类
class Graduate : Student {
var supervisor = “”
var researchTopic = “”
func chooseSuperVisor(superVisor:String){
self.supervisor = superVisor
}
}
let theGraduate = Graduate()
theGraduate.name = “Sam”
theGraduate.age = 23
theGraduate.id = “SY0602115”
theGraduate.haveClass()
theGraduate.researchTopic = “Graphics”
theGraduate.chooseSuperVisor(superVisor: “Ian”)
print(“Graduate (theGraduate.name) is (theGraduate.age) and the id is (theGraduate.id), The research topic is (theGraduate.researchTopic) and supervisor is (theGraduate.supervisor)”)
//子类的子类
class Doctor: Graduate {
var articles = String
func publishArticle(article : String){
articles.append(article)
}
}

let theDoctor = Doctor()
theDoctor.name = “Pennie”
theDoctor.age = 26
theDoctor.id = “BY0607120”
theDoctor.basicInfo
theDoctor.chooseSuperVisor(superVisor: “Ellis”)
theDoctor.supervisor
theDoctor.publishArticle(article: “Petri nets theory”)
theDoctor.publishArticle(article: “Process management”)
theDoctor.articles
//多态性
class Student {
var name = “”
var age = 0
var id = “”
var basicInfo : String {
return “(name) is (age) years old, the id is (id”
}
func chooseClass(){
print(“(name) choose a class.”)
}
func haveClass(){
print(“(name) have a class.”)
}
}
class Graduate : Student {
var supervisor = “”
var researchTopic = “”
override var age : Int {
didSet {
print(“age is set from (oldValue) to (age”)
}
willSet {
print(“original age will be set to (newValue)”)
}
}
override var basicInfo: String{
return super.basicInfo + “, supervisor is (supervisor), research topic is (researchTopic)”
}
func chooseSuperVisor(superVisor:String){
self.supervisor = superVisor
}
override func chooseClass() {
print(“graduate (name) choose a class”)
}
}
func sportGameRoster(stu:Student)->String{
return “Athlete name:(stu.name),age:(stu.age),id:(stu.id)”
}

let studenteTom=Student()
studenteTom.name=“Tom”
studenteTom.age=19
studenteTom.id=“37060116”

let graduateJim=Graduate()
graduateJim.name=“Jim”
graduateJim.age=24
graduateJim.id=“SY060218”
let rosterTom=sportGameRoster(stu: studenteTom)
let rosterJim=sportGameRoster(stu: graduateJim)
在这里插入图片描述

3.扩展

//扩展计算属性
extension Int {
var kg : Int {return self * 1000 }
var ton : Int {return self * 1000000}
}
var aChick = 2.kg
var aElephant = 8.ton
print(“aClick is (aChick)g”)
print(“aElephant is (aElephant)g”) //扩展计算属性
extension Int {
var kg : Int {return self * 1000 }
var ton : Int {return self * 1000000}
}
var aChick = 2.kg
var aElephant = 8.ton
print(“aClick is (aChick)g”)
print(“aElephant is (aElephant)g”)
//扩展构造器
struct Student {
var name : String
var id : String
var age : Int
init(){
name = “”
id = “”
age = 0
}
}
extension Student {
init(name : String, id : String, age : Int){
self.name = name
self.id = id
self.age = age
}
}
let theStudent = Student(name: “Jack”, id: “37060115”, age: 18)
//扩展方法
struct Student {
var name : String
var id : String
var age : Int
init(){
name = “”
id = “”
age = 0
}
}
extension Student {
init(name : String, id : String, age : Int){
self.name = name
self.id = id
self.age = age
}
func description(){
print(“(name)'s age is (age) and id is (id)”)
}
}
let theStudent = Student(name: “Jack”, id: “37060115”, age: 18)
theStudent.description()
//扩展下标
struct Student {
var name : String
var id : String
var age : Int
init(){
name = “”
id = “”
age = 0
}
}
extension Student {
init(name : String, id : String, age : Int){
self.name = name
self.id = id
self.age = age
}
}
struct Class {
var students = Student
}
extension Class {
subscript(Index : Int) -> String{
return students[Index].name
}
}

var theClass = Class()
theClass.students.append(Student(name: “Sam”, id: “0”, age: 16))
theClass.students.append(Student(name: “Tom”, id: “1”, age: 18))
theClass.students.append(Student(name: “Jeff”, id: “2”, age: 19))
let oneStudentName = theClass[0]
print(oneStudentName)
在这里插入图片描述

4.协议

//协议的声明
protocol Person {
var name: String { get set}
var age: Int { get }
}
//类遵守协议
class Student: Person {
var name : String
var age : Int
init(){
name = “”
age = 0
}
}
//协议中的关联类型
protocol Person {
associatedtype UnknownType
var name: String { get set}
var age: Int { get }
var weight: UnknownType { get }
}
class Student: Person {
var name : String
var age : Int
var weight: Double
init(){
name = “”
age = 0
weight = 0.0
}
}
//协议中的关联类型
protocol Person {
associatedtype UnknownType
var name: String { get set}
var age: Int { get }
var weight: UnknownType { get }
}
class Student: Person {
var name : String
var age : Int
var weight: Double
init(){
name = “”
age = 0
weight = 0.0
}
}
//协议中的关联类型
protocol Person {
associatedtype UnknownType
var name: String { get set}
var age: Int { get }
var weight: UnknownType { get }
}
class Student: Person {
var name : String
var age : Int
var weight: Double
init(){
name = “”
age = 0
weight = 0.0
}
}
//协议的继承性
protocol Person {
associatedtype UnknownType
var name : String {get set}
var age : Int {get set}
var weight: UnknownType { get }
func personDescription()
}
protocol Student {
var school : String {get set}
func studentDescription()
}
protocol Graduate : Person, Student {
var supervisor : String {get set}
func graduateDescription()
}
class ComputerAssociationMember : Graduate {
var name : String = “”
var age : Int
var weight: Double
var school : String
var supervisor : String
func personDescription() {
print(“It’s person description”)
}
func studentDescription() {
print(“It’s student description”)
}
func graduateDescription() {
print(“It’s graduate description”)
}
init(name : String, age : Int, weight: Double, school : String, supervisor :String){
self.name = name
self.age = age
self.weight = weight
self.school = school
self.supervisor = supervisor
}
}
let theMember = ComputerAssociationMember(name: “Tom”, age: 23, weight: 69.2, school: “BUAA”, supervisor: “Ian”)
theMember.personDescription()
theMember.studentDescription()
theMember.graduateDescription()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、实验结果与分析:

本次实验,我主要学习了Swift扩展&协议&类的使用。在本次的实验学习中,有时候会因为对基本概念不熟悉,导致编写语法使用不恰当,导致运行结果出错,但最后经过不但的改进与尝试,最后的结果都是可以正常运行出来的。

五、实验总结:

通过本次课程的学习,主要的了解如下:Swift中有三种type(类型):class(类),struct(结构体),enum(枚举):
这三个类型的区别在于class是引用类型,而另外两个是值类型。区别在于,引用类型的对象是可以动态分配的(可以变化),而值类型的对象在初始化时一般就分配好了(不准改动)。而mutating关键字则允许在它修饰的方法中去修改对象本身的值或对象属性的值(self或self.xxx的值)。
1.如果协议仅针对class,不需要mutating关键字。
2.如果协议会被enum或struct使用,协议中的方法需要mutating修饰。

相关内容

热门资讯

面对那座山【精简3篇】 面对那座山 篇一山,是大自然的杰作,也是人类勇往直前的象征。面对那座山,我们可以感受到无穷的力量和挑...
青春快乐初三作文(推荐6篇) 青春快乐初三作文 篇一初三是每个学生都期待的一个年级,因为它代表着我们即将迈向高中阶段,成为一个更加...
英语初三梦想作文范文【优选6... 英语初三梦想作文范文 篇一:实现我的梦想My Dream: Becoming a Successfu...
读一本好书作文800字初三【... 读一本好书作文800字初三 篇一《红楼梦》是我读过的一本好书。这本书由曹雪芹所著,是中国古代文学的瑰...
一瞬间作文初三400写65篇... 一瞬间作文初三400写65篇 篇一标题:一瞬间的温暖一瞬间的温暖,可以让人感受到来自内心深处的喜悦和...
最喜欢的歌的作文初三(最新6... 最喜欢的歌的作文初三 篇一我最喜欢的歌是《小幸运》。这首歌是由田馥甄演唱的,也是电影《小时代》的主题...
第2课林中小溪(精选3篇) 第2课林中小溪 篇一林中小溪:一曲天籁之音在茂密的森林深处,隐藏着一条清澈的小溪。这条小溪蜿蜒流淌,...
牡丹花开作文初一共6篇 牡丹花开作文初一 第一篇你一定见过迎春,月季,玉兰,蒲公英……可你见过花中之王——牡丹吗?我爷爷有一...
宋城一日游【最新6篇】 宋城一日游 篇一宋城是中国江苏省苏州市的一座主题公园,以还原宋朝时期的建筑和文化而闻名。作为一个历史...
买飞轮斗士记初一作文【实用5... 买飞轮斗士记初一作文 篇一我是一个初一学生,最近我买了一本《飞轮斗士记》的漫画,让我非常兴奋和激动。...
雨的作文初三的700字【实用... 雨的作文初三的700字 篇一雨中的舞蹈初夏的午后,天空乌云密布,一场暴雨突然来临。雨点密集而有力地敲...
可以为你初一作文(推荐6篇) 可以为你初一作文 篇一我的暑假生活暑假终于来了,这是我初中生涯的第一个暑假。我非常期待这个假期,因为...
思考的乐趣初中作文(优选5篇... 思考的乐趣初中作文 篇一思考是一种极为有趣的活动。它能够让我们更深入地了解问题的本质,培养我们的逻辑...
冲动是魔鬼初中作文600字(... 冲动是魔鬼初中作文600字 篇一冲动是魔鬼冲动是一种无法控制的情绪和冲动行为,常常会给我们带来不良后...
山洞探险的初一作文500字【... 山洞探险的初一作文500字 篇一 山洞探险的初一作文500字 篇二山洞探险的初一作文500字 篇三 ...
初一作文未来【精彩6篇】 初一作文未来 篇一:未来的太空探索未来,随着科技的不断进步,人类对太空的探索将会取得巨大的突破。我们...
初中毕业的作文600字【优质... 初中毕业的作文600字 篇一初中毕业的感悟初中三年的时光转瞬即逝,仿佛昨天还是一个胆小怯懦的小学生,...
初中话题作文:战争与和平40... 初中话题作文:战争与和平400字 篇一战争与和平战争是人类社会发展中最为残酷的一种方式,它带来的破坏...
我的似水年华初中作文800字... 我的似水年华初中作文800字 篇一初中时光如流水般匆匆而过,留下了我许多美好的回忆。回想起这段时光,...
师生情初一作文800字(通用... 师生情初一作文800字 篇一初中生活中,师生情是一种特殊而珍贵的情感。在我初一的这一年里,我深深地感...