import Foundation

// 创建一个类

class Student {

// 属性(类的属性必须赋初值,如果不赋值,需要写自定义方法)

var studentName: String

var studentAge: Int

// 方法

func fallInLove(girlName:String) {

print("\(self.studentName)看上隔壁的\(girlName)")

}

// 构造方法(自定义init方法)

init (studentName1:String, studentAge1:Int) {

// 左边是属性,右边是形参

self.studentName = studentName1

self.studentAge = studentAge1

}

}

// 实例化一个student

var student = Student(studentName1: "老王", studentAge1: 18)

// 访问属性

print("\(student.studentName)的年龄为\(student.studentAge)")

// 设置年龄

student.studentAge = 20

print("\(student.studentName)的年龄为\(student.studentAge)")

// 方法调用(OC中是方括号,swift中是用点语法)

student.fallInLove("如花")

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

// 结构体不用自定义init方法,即不用写构造方法,系统会根据属性自动生成

// 类可以继承,结构体不能继承

// 类,如果创建的是let类型,只要属性是var就可以修改

// 结构体,如果创建的是let类型,即使属性是var也是不能修改的

// 结构体,首字母大写

struct GirlSTR {

// 属性

var girlName:String = "林志玲"

var girlHeight:Double = 175.5

// 方法

func togetherAction(boyName:String){

print("\(self.girlName)和\(boyName)")

}

}

// 实例化一个结构体

var girl = GirlSTR()

// 访问属性

print(girl.girlName)

// 设置属性

girl.girlName = "苍老师"

print(girl.girlName)

// 方法调用

girl.togetherAction("隔壁老王")

// 类是引用类型,结构体是值类型

var tempStudent = Student(studentName1: "张三", studentAge1:18)

var tempStudent2 = tempStudent

tempStudent.studentName = "李四"

print("\(tempStudent.studentName)->\(tempStudent2.studentAge)") // 结果为李四->18

var tempGirl = GirlSTR()

var tempGirl2 = tempGirl

print("\(tempGirl.girlName)-\(tempGirl2.girlName)") // 结果都为林志玲-林志玲

tempGirl2.girlName = "苍老师"

print("\(tempGirl.girlName)-\(tempGirl2.girlName)") // 结果为林志玲-苍老师

/****************** 属性 *****************/

// 从功能方面分为两种:1.存储属性 2.计算属性

// 从调用方式分两种:1.实例属性 2.类属性

// 存储属性(存储我们设置的属性值)

class Animal {

// 定义一个存储属性

var animalName:String

// 如果不想赋初值,也不想在init方法中写,就要把这个属性的类型变为可选类型

var isSpeaking:Bool?

// 构造方法

init(animalName:String){

self.animalName = animalName

}

}

// 实例化

var tempAnimal = Animal(animalName: "米老鼠")

print(tempAnimal.animalName)

print(tempAnimal.isSpeaking)

// 计算属性

class Animal2 {

// 存储属性

var animalName:String?

// 计算属性(不能直接存储值,有set和get方法)

var replaceName:String{

// get方法必须写返回值

// get方法是必须写的,set方法可以不写,此时属于只读属性

get {

return "hello kitty"

}

set{

// newValue是系统变量

self.animalName = newValue

}

}

}

var animal2 = Animal2()

// set方法

animal2.replaceName = "唐老鸭"

// get方法

print(animal2.replaceName)

// 类属性

class Animal3 {

// 实例属性(存储属性)

var animalNmae:String?

// 类属性(只能是计算属性)

class var animalFriend:String {

get{

return "Tom"

}

}

}

// 实例化

var animal3 = Animal3()

// 用实例对象去调用

animal3.animalNmae = "Hello Kitty"

// 类属性,直接用类调用

print(Animal3.animalFriend)

// 结构体中的类属性

struct Animal4{

// 结构体中的类属性 static修饰,可以是存储属性

static var animal4Name:String = "Hello Kitty"

// 类属性 计算属性

static var animal4Friend:String{

get{

return "TomCat"

}

}

}

// 调用类属性

print(Animal4.animal4Name)

print(Animal4.animal4Friend)

/*************** 方法 *********************/

// 方法分为两大类:1.实例方法 2.类方法

class CityInfo {

// 存储属性,实例属性

var cityName:String?

var cityTravelPoint:String?

// 类属性

class var printCityOtherTravelPoint:String {

get{

return "天安门"

}

}

// 实例方法

func printCityTravelPoint(){

print("\(cityTravelPoint!)是\(cityName!)的景点")

}

// 类方法只能使用类属性

class func printCityTravelPoint(travelPoint1 travelPoint1:String, travelPoint2:String) {

print("\(travelPoint1)-\(travelPoint2)")

}

}

// 实例化

var tempCity = CityInfo()

tempCity.cityName = "北京"

tempCity.cityTravelPoint = "故宫"

// 调用实例方法

tempCity.printCityTravelPoint()

// 调用类方法

CityInfo.printCityTravelPoint(travelPoint1: "北海", travelPoint2: "长城")

// 结构体中的类方法

struct CityInfo2{

// 存储属性 实例属性

var cityName2:String?

var cityPoint2:String?

// 类属性

static var cityName22:String = "NewYork"

static var cityPoint22:String = "自由女神像"

// 实例方法(只能使用实例属性)

func printCityInfo(){

print("\(cityName2!)的景点有\(cityPoint2!)")

}

// 类方法(只能使用类属性)

static func printCityInfo2(){

print("\(cityName22)的景点有\(cityPoint22)")

}

}

// 调用实例方法

var tempCity1 = CityInfo2(cityName2: "洛阳", cityPoint2: "白马寺")

tempCity1.printCityInfo()

// 调用类方法

CityInfo2.printCityInfo2()

// 属性观察器(监测属性的变化)

class Iphone{

var iphoneType = "6Plus"

var iphoneColor = "Gole"

var iphonePrice : Int = 6000 {

willSet{

print("newValue = \(newValue)")

}

didSet{

print("oldValue = \(oldValue)")

}

}

}

var tempiPhone = Iphone()

print("\(tempiPhone.iphoneColor)->\(tempiPhone.iphonePrice)")

// 降价

tempiPhone.iphonePrice = 4500

// 涨价

tempiPhone.iphonePrice = 5000

/************** 继承 **************/

// 父类

class Zombie {

// 存储属性

var blood:Int = 10

// 计算属性

var name:String {

get {

return "普通僵尸"

}

}

// 方法

func speaking() {

print("父类普通僵尸")

}

}

// 子类

class PailZombie:Zombie {

var tool: String = "铁桶"

// 重写父类方法,前面需加override

override func speaking() {

print("子类铁通僵尸")

}

}

// 实例化一个父类

var tempZombie = Zombie()

print(tempZombie.blood)

// 实例化一个子类

var tempPailZombie = PailZombie()

// 子类继承父类的属性

print(tempPailZombie.blood)

// 子类自己的属性

print(tempPailZombie.tool)

// 子类继承父类的方法

tempPailZombie.speaking()

/************** 协议 ****************/

// 协议关键字 protocol

@objc protocol MerryDelegate {

// 必须实现的方法

func cook()

// 可选实现的方法

optional func shopping()

}

class Man: MerryDelegate {

var name:String?

// 代理方法

@objc func cook() {

print("今天我做饭")

}

}

// 实例化一个对象

var tempMan = Man()

tempMan.name = "小明"

// 执行代理方法

tempMan.cook()

/***************** 延展 ***************/

// 延展可以扩充协议中的方法

extension Man {

func shopping() {

print("清空购物车")

}

}

// 执行的是延展中的方法

tempMan.shopping()

// 延展可以扩充类中的方法

extension Man {

func travel () {

print("周末去旅游")

}

}

// 执行延展类中的方法

tempMan.travel()

/*************** 闭包(相当于block) ****************/

// 定义一个闭包 in的前面是参数列表和返回值,后面是要执行的block块

var block = { (str:String)->Void in

print("block = \(str)")

}

// 调用

block("万万没想到")

Swift基础(类,结构体,函数)的更多相关文章

  1. Swift超详细的基础语法-结构体,结构体构造器,定义成员方法, 值类型, 扩充函数

    知识点 基本概念 结构体的基本使用 结构体构造器(构造函数/构造方法) 结构体扩充函数(方法), 又称成员方法 结构体是值类型 1. 基本概念 1.1 概念介绍 结构体(struct)是由一系列具有相 ...

  2. swift中的结构体和枚举

    Swift 里的结构体非常特殊. 类是面向对象编程语言中传统的结构单元.和结构体相比,Swift 的类支持实现继承,(受限的)反射,析构函数和多所有者. 既然类比结构体强大这么多,为什么还要使用结构体 ...

  3. Go语言基础之结构体

    Go语言基础之结构体 Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在G ...

  4. swift中类与结构体

    写了12个Person来复习,不过完成同样的代码需要敲键盘的次数相比OC确实少了很多,这很多应该归功于Swift中不写分号,以及少了OC中的中括号. 一.类与结构体 两者在Swift中差不了多少了 类 ...

  5. GO学习-(13) Go语言基础之结构体

    Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. ...

  6. C的结构体函数

    #include<stdio.h> #include<string.h> struct Test { int age; ]; double score; }std1; //结构 ...

  7. swift 类 结构体 作为参数 以及可变参数

    Class class Person{ var age = 22, name = "frank" func growolder() { self.age++ //++ 要跟住 不要 ...

  8. go语言基础之结构体做函数参数 值传递和地址传递

    1.结构体做函数参数值传递 示例: package main //必须有个main包 import "fmt" //定义一个结构体类型 type Student struct { ...

  9. Go基础之--结构体和方法

    结构体的定义 结构体是将零个或者多个任意类型的命令变量组合在一起的聚合数据类型.每个变量都叫做结构体的成员. 其实简单理解,Go语言的结构体struct和其他语言的类class有相等的地位,但是GO语 ...

随机推荐

  1. Coursera公开课-Machine_learing:编程作业3

    第四周 编程作业: Multi-class Classification and Neural Networks 这周作业与上一周有许多相同的部分,比如longistic regression中的lr ...

  2. [转]linux uniq 命令详解

    转自:http://blog.csdn.net/tianmohust/article/details/6997683 uniq 命令   文字 uniq 是LINUX命令 用途 报告或删除文件中重复的 ...

  3. VS插件-Resharper

    最近代码因为Resharper出现了点问题,同事问我这个插件有什么用,下面就列几个最近常用的功能.其他功能后续慢慢更新 1.什么是Resharper ReSharper是一个JetBrains公司出品 ...

  4. Mysql(三):多表查询和存储程序

    今天内容: ● 多表查询(内连接 外连接 子查询) ● 存储程序(存储过程 函数) 多表查询 ​ 同时从多张数据表中查取到需要的数据即是多表查询. 多表查询时,参与查询的表中每条数据进行组合,这种效果 ...

  5. 【技术累积】【点】【java】【30】代理模式

    基础 代理模式是Java常见的设计模式之一.所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象. 什么是代理 参考现实生活中的代理 比如某个品牌的某个省的代理商,作 ...

  6. VUE路由history模式坑记--NGINX

    因微信分享和自动登录需要,对于URL中存在'#'的地址,处理起来比较坑(需要手动写一些代码来处理).还有可能会有一些隐藏的问题没被发现. 如果VUE能像其他(JSP/PHP)系统的路径一样,就不存在这 ...

  7. PHP连接mysql8.0出错“SQLSTATE[HY000] [2054] The server requested authentication method unkno…

    今天安装安装一个叫得推校园O2O系统的使劲都说连接不上服务器. 下面是安装说明,我直接进行3步骤,导入数据库配置文件,结果就显示题目报错的内容 安装说明: 直接输入程序目录即可 http://loca ...

  8. Linux内核系统调用处理过程

    原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 学号末三位:168 下载并编译Linux5.0 xz -d linux-.tar.xz . ...

  9. js的基础运用

    总结: 1.定义:分为隐式定义和显式定义可以先定义后赋值. 2.+:当两边都是数值则运行加法运算,若一遍是字符型则进行拼接. 3.数值变字符:数值变量.toString()方法. 字符变数值:通过加一 ...

  10. 在iOS项目中嵌入RN代码

    1:在项目跟目录下创建一个ReactComponent文件夹.目录结构如下: 2: 在ReactComponent文件夹下新建一个 package.json 文件 { "name" ...