Swift基础(类,结构体,函数)
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基础(类,结构体,函数)的更多相关文章
- Swift超详细的基础语法-结构体,结构体构造器,定义成员方法, 值类型, 扩充函数
知识点 基本概念 结构体的基本使用 结构体构造器(构造函数/构造方法) 结构体扩充函数(方法), 又称成员方法 结构体是值类型 1. 基本概念 1.1 概念介绍 结构体(struct)是由一系列具有相 ...
- swift中的结构体和枚举
Swift 里的结构体非常特殊. 类是面向对象编程语言中传统的结构单元.和结构体相比,Swift 的类支持实现继承,(受限的)反射,析构函数和多所有者. 既然类比结构体强大这么多,为什么还要使用结构体 ...
- Go语言基础之结构体
Go语言基础之结构体 Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在G ...
- swift中类与结构体
写了12个Person来复习,不过完成同样的代码需要敲键盘的次数相比OC确实少了很多,这很多应该归功于Swift中不写分号,以及少了OC中的中括号. 一.类与结构体 两者在Swift中差不了多少了 类 ...
- GO学习-(13) Go语言基础之结构体
Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. ...
- C的结构体函数
#include<stdio.h> #include<string.h> struct Test { int age; ]; double score; }std1; //结构 ...
- swift 类 结构体 作为参数 以及可变参数
Class class Person{ var age = 22, name = "frank" func growolder() { self.age++ //++ 要跟住 不要 ...
- go语言基础之结构体做函数参数 值传递和地址传递
1.结构体做函数参数值传递 示例: package main //必须有个main包 import "fmt" //定义一个结构体类型 type Student struct { ...
- Go基础之--结构体和方法
结构体的定义 结构体是将零个或者多个任意类型的命令变量组合在一起的聚合数据类型.每个变量都叫做结构体的成员. 其实简单理解,Go语言的结构体struct和其他语言的类class有相等的地位,但是GO语 ...
随机推荐
- setjmp和longjmp函数
关于setjmp函数和longjmp函数有话要说,是UNIX高级环境变成看到了10.10信号那章用到了,研究一下,这里作为补充. setjmp(jmp_buf env_buf) 函数可以将当前的运行环 ...
- MVC系列学习(十二)-服务端的验证
在前一讲,提到过,客户端的东西永远可以造假,所以我们还要在服务端进行验证 注意:先加载表单,后添加js文件,才能有效:而先加载js,后添加表单,是没有效果的 1.视图与Model中的代码如下 2.一张 ...
- XML解析-Dom4j的DOM解析方式更新XML
Dom4j工具,是非官方的,不在jdk中. 使用步骤: 1)导入dom4j的核心包. dom4j-1.6.1.jar 2)编写Dom4j读取xml文件的代码 1.更新XML 1.1.写出内容到xml文 ...
- pd_ds 之 hash
http://attack.cf/?post=23 打个广告....
- PHP开发之旅-提取表单提交内容发送邮件
在实际项目开发中,我们经常需要得到用户的反馈信息并及时回复.普通的留言板有一定的内容限制,而邮件则能满足这个需求.今天给大家演示一下怎么利用PHP发送电子邮件. 1.创建表单 <form nam ...
- html——特例
1.a标签与a标签之间有3px距离 2.标准流中的文字不会被浮动的盒子遮挡 <div style="width:150px;height:150px;background-color: ...
- 【sqli-labs】 less56 GET -Challenge -Union -14 queries allowed -Variation3 (GET型 挑战 联合查询 只允许14次查询 变化3)
单引号括号闭合 http://192.168.136.128/sqli-labs-master/Less-56/?id=1')%23 http://192.168.136.128/sqli-labs- ...
- (转)学习淘淘商城第二十二课(KindEditor富文本编辑器的使用)
http://blog.csdn.net/u012453843/article/details/70184155 上节课我们一起学习了怎样解决KindEditor富文本编辑器上传图片的浏览器兼容性问题 ...
- mysql_基础1
初学mysql,感觉挺有意思的. mysql指令的一些参数: promrt修改提示符: PROMPT \D mysql的语法规范: 一些函数: 创建数据库: SHOW CREATE DATABAS ...
- 吐得了,vue的多选组合框回显必须是字符串集合
下面这个typeIdList,如果给他赋值,就能回显到页面,但是必须是字符串的集合,如果是数值类型的id,不好意思,请转成字符串