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语 ...
随机推荐
- Quartz在服务异常中断或者重启后,不执行之前漏掉的任务,重新运行下一次任务
Quartz默认重启后会执行之前的任务,所以如果不想执行之前漏掉的任务,需要设置一下两个地方: CRON triggers CronTrigger trigger = TriggerBuilder.n ...
- 【LeetCode】 -- 68.Text Justification
题目大意:给定一个数组容器,里面存有很多string: 一个int maxWith.让你均匀安排每一行的字符串,能够尽可能的均匀. 解题思路:字符串+贪心.一开始想复杂了,总觉的题意描述的不是很清楚, ...
- Unity Toast插件(UGUI版)
简介 介于自己之前经历的一些开发过程,非常希望unity能有类似Toast的功能用于一些简单的信息显示.但是找来找去找了半天,都木有发现,实在是憋不住了,自己写了个,感觉还可以用,发出来共享一下... ...
- sql 列集合转换成逗号分隔的字符类型
CREATE function [dbo].[getGroupPath](@groupId int) returns nvarchar(2000) as begin declare @path nva ...
- shouldComponentUpdate不能直接比较object
凡是参阅过react官方英文文档的童鞋大体上都能知道对于一个组件来说,其state的改变(调用this.setState()方法)以及从父组件接受的props发生变化时,会导致组件重渲染,正所谓&qu ...
- mysql高可用架构mha之master_ip_failover脚本
脚本如下: #!/usr/bin/env perl use strict; use warnings FATAL => 'all'; use Getopt::Long; my ...
- Vue和JQuery相比,除了节省了开发成本,还有什么优点?
1.模块化,变量都是私有作用域,JQuery只能用全局变量.闭包,影响性能 2.组件化 3.因为1,所以方便维护 vuex 要注意刷新清空的问题 vue-router是局部刷新,window.loca ...
- redis数据库学习笔记
redis数据库 工作需要,简单了解一下redis数据库,供后续参考和复习使用. 一.简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.它支持字 ...
- js可以随意拖拽的div的实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- php第十五节课
租房表 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...