Swift中enum, struct, class的有关使用方法
import Foundation print("Hello, World!") let a =
var b =
var c = a + b;
c = //重载:函数名相同, 函数类型不同(参数, 返回值不同), 构成重载, 调用的时候, 根据参数确定调用那个函数
func helloworld(a:Int)->Int {
return a *
}
func hellowold(a:String)->Int {
return
}
print(hellowold("")) //for 循环
//区间0...10 = [0, 10] 0..<10 = [0, 10)
for i in ... {
print("i = \(i)")
} //1.枚举
//2.类 和 结构 //定义枚举值
enum Direction : String {
case East = "东"
case West = "西"
case South = "南"
case North = "北"
} //定义变量接受枚举值
//如果给一个变量赋值过一次枚举值, 下次赋值可以直接使用.进行赋值
var dir = Direction.East
print(dir) var dir2 = dir
dir = .North
print("dir = \(dir.rawValue), dir2 = \(dir2.rawValue)") //枚举值的原始值
enum Season: Int{
case Spring =
case Snmmer
case Fall
case Winter
} var se = Season.Spring
//rawValue, 原始值
print(se.rawValue) //通过枚举值的原始值找到枚举值
let sea = Season(rawValue: )
print(sea) //隐式解析
if let s = sea {
print("s = \(s)")
} else {
print("无法找到枚举值")
} enum Student: String{
case Primary = "小学"
case junior
case senior
case university
} var stu = Student.Primary
print( stu.rawValue) let student = Student(rawValue:"小学")
print(student) if let st = student {
print("st = \(st)")
} else {
print("无法找到枚举值")
} enum FourFlower : String {
case 闯神 = "尼古拉斯·闯"
case 龙神 = "龙神"
case 宗主 = "宗主"
case 半张 = "半张"
} let flower = FourFlower.闯神.rawValue
print("闯神\(flower)") //类 和 结构体
struct Person{
var height = 1.8
var weight =
var age =
} //实例结构体化
//()就是结构体的一个初始化方法
var 广恩 = Person()
print(广恩.weight)
广恩.weight =
print("广恩的体重 = \(广恩.weight)KG") //逐一构造器
//构造 = alloc...init = 初始化
//析构 = dealloc = 释放
var 康康 = Person (height: , weight: , age: ) let str = "康康的身高为\(康康.height), 体重为\(康康.weight)" + ", 年龄为\(康康.age)"
print(str) var 李阳 = 康康
康康.height =
print("李阳.height = \(李阳.height)") //类
class Student1{
var num =
var name = "万宝"
var GoodFriend = "闯神"
} //系统没有给类自动添加逐一构造器
var 万少 = Student1()
万少.GoodFriend = "越南"
print(万少.GoodFriend) var 龙神 = 万少
万少.GoodFriend = "Xcode"
print(龙神.GoodFriend) //A = B
//值类型 : 赋值完成以后, B 修改, A不变. 枚举值 和 结构体就是值类型. 类似 copy 的过程
//引用类型 : 赋值完成以后, B 修改, A 随着 B 改变, 类就是引用类型. 类似 retain 的过程 //属性
//存储属性:用来存值和取值
//计算属性:计算属性的值通过 GET 方法, 用其他因素获取, set方法一般用来处理事务. 只写 GET, 这个属性是只读的; 不能只写 set
class Animal {
//存储属性
var type = "Elephant"
var weigh =
//计算属性
var leg : Int {
get {
if type == "Elephant" {
return
} else if type == "bird" {
return
} else {
return
}
}
//set 方法需要一个 新值 参数
set(newValue){
if(newValue >= ){
print("不可能是人")
} else {
print("有可能是人")
}
}
}
} var per = Animal()
per.type = "老人"
print("per.leg = \(per.leg)") per.leg =
print("per.leg = \(per.leg)") //练习
//1.定义一个名字为rect的结构体
//2.属性包括 存储属性, x, y, with, height 计算属性 centerX, centerY
//3.centerX 和 centerY 由存储属性计算得出
//4.centerX 和 centerY 的 set 方法内分别依据 x/y 和 新值计算width/height struct Rect { //属性包括 存储属性, x, y, with, height
var x = 0.0
var y = 0.0
var width = 0.0
var height = 0.0 //在类内部使用属性的时候, 可以省略 self.
//只有涉及到参数名字和属性相同的时候, 建议加上 self.以示 //计算属性 centerX, centerY
var centerX :Double {
get{
//centerX 和 centerY 由存储属性计算得出
return self.x + self.width/2.0
}set{
//centerX 和 centerY 的 set 方法内分别依据 x/y 和 新值计算width/height
width = (newValue - x)*
}
} var centerY :Double {
get{
return y + height/2.0
}set{
height = (newValue - y)*
}
} } //属性观察器
class Plant { var type = "绿色植物"{
willSet(newType) {
print("newType = \(newType), 当前值\(type)")
} didSet(oldType) {
print("oldType = \(oldType), 当前值\(type)")
}
} var hasFlower : Bool = false {
willSet {
print("新值为\(newValue), 当前值为\(hasFlower)")
} didSet {
print("旧值为\(oldValue), 当前值为\(hasFlower)")
}
}
}
var appleTree = Plant()
appleTree.type = "苹果树"
appleTree.hasFlower = true //类型属性
class Fruit {
//是否有皮
static var hasRind = true
} print("水果是否有皮: \(Fruit.hasRind)") //方法
class Computer{
var brand = "美帝良心想"
var price =
func des(name:String){
print("\(name)买了\(brand), 花了¥\(price)")
}
}
var compu = Computer()
compu.des("闯神") class Car {
var brand = "奥迪"
var color = "黑色"
func TYPE(name:String){
print("\(name)买了颜色为\(color)的车, 牌子是\(brand)")
}
}
var car = Car()
car.TYPE("外星人") //继承
//定义父类
class Teacher {
var academic = "教授"
var offer =
func teach(){
print("某\(academic)的薪资是\(offer)")
} //禁止被重写的方法
//final 禁止被重写的关键字
final func study(bookName:String){
print("某\(academic),刻苦钻研\(bookName)")
} var num : Int {
get {
return
} set { }
} } //定义一个子类
//讲师
class Lecturer: Teacher {
var industry = "iOS"
//重写父类方法
//override 重写父类方法关键字
override func teach() {
//调用父类方法
super.teach()
print("从事行业是\(industry)")
}
}
let lec = Lecturer()
lec.academic = "两院院士"
lec.teach()
lec.study("<<论持久战>>") //重写属性
//把存储属性重写为计算属性
//不能把计算属性重写为存储属性
class ChildrenTeacher:Teacher {
override var offer: Int {
get{
return
} set { }
}
// override var num = 100
} //构造
//除了可选类型属性, 在构造过程中, 必须给各个属性赋初始值
class Hero{
var age :Int?
var name : String
var equipment = "金箍棒"
var saddleHorse : String
init(){
name = "孙悟空"
saddleHorse = "筋斗云"
}
//自定义一个构造方法
init(name:String, equipment:String, saddleHorse:String ){
self.name = name
self.equipment = equipment
self.saddleHorse = saddleHorse
}
}
let 孙悟空 = Hero()
print(孙悟空.saddleHorse)
let 大禹 = Hero(name: "大禹", equipment: 孙悟空.equipment, saddleHorse: "11路公交") class Film {
var name : String
var price : Float
var director : String init (name:String, price:Float, director:String){
self.name = name
self.price = price
self.director = director
}
func description(){
print("电影名字\(name), 价格为\(price), 导演是\(director)")
} //遍历构造器
//和 OC 的不是一回事, OC的是 类方法
//convenience 在构造方法前添加 convenience代表当前构造器为便利构造器
//遍历构造器必须调用自身的指定构造器
convenience init(){
self.init(name:"", price:, director:"王晶")
// name = "123"
// price = 22
// director = "王晶"
}
} let 澳门风云三 = Film(name: "澳门风云三", price: , director: "尔冬升")
print(澳门风云三.price)
澳门风云三.description() let 恶棍天使 = Film()
恶棍天使.description()
Swift中enum, struct, class的有关使用方法的更多相关文章
- Swift中由找不到removeAll(where:)方法引起的连锁反应(上)
核心代码 section.removeAll {baseRow in if let habitRow = baseRow as? HabitRow{ let idxPath = habitRow.in ...
- 使用swift 中的注意,不断完善中
1. 应该充分利用swfit的新特性 比如如果按照oc里的习惯,调用一个delegate中都optional函数应该这样写 if delegate != nil && delegate ...
- Swift 中枚举
Swift 中枚举高级用法及实践 字数11017 阅读479 评论0 喜欢20 title: "Swift 中枚举高级用法及实践"date: 2015-11-20tags: [AP ...
- Swift基础--通知,代理和block的使用抉择以及Swift中的代理
什么时候用通知,什么时候用代理,什么时候用block 通知 : 两者关系层次太深,八竿子打不着的那种最适合用通知.因为层级结构深了,用代理要一层一层往下传递,代码结构就复杂了 代理 : 父子关系,监听 ...
- Swift 中的getting和setter的使用
以下简单的介绍Swift中的getting和setting的使用方法: Xcode version: 6.1 先附代码: class Test { var num1: Double = 0.0 ini ...
- UISegmentedControl在Swift中的使用
UISegmentedControl控件是分段显示控件,用户可以选择它上展示的任一段部分,每一个部分都像是一个按钮,如果被按下也会像UIButton一样执行相应的方法.在这篇文章中我们将创建一个UIS ...
- Swift中 @objc 使用介绍
在swift 中 如果一个按钮添加点击方法 如果定义为Private 或者 定义为 FilePrivate 那么会在Addtaget方法中找不到私有方法 但是又不想把方法暴露出来,避免外界访问 ,那 ...
- 把Swift中的String转成NSString ,获取NSString的方法
1.0 在Swift中的 String 并没有提供什么方法,直接把它自身转变成 Int .Float 等,而在OC中我们就可以这样 "123".integerValue 来获取它 ...
- 阿里巴巴最新开源项目 - [HandyJSON] 在Swift中优雅地处理JSON
项目名称:HandyJSON 项目地址:https://github.com/alibaba/handyjson 背景 JSON是移动端开发常用的应用层数据交换协议.最常见的场景便是,客户端向服务端发 ...
随机推荐
- MVP之高级MVP架构封装
MVP之高级MVP架构封装 No MVP: 我们一般会这样写: public class MainActivity extends AppCompatActivity { private EditTe ...
- AngelToken揭秘区块链之四大链
区块链,有着各种不同,与之相对应的就是内涵和功能.在区块链领域经常出现的四大链有:公有链.私有链.联盟链.许可链,这些链又分别可以为区块链干什么呢? 公有链(Public Blockchain) 是指 ...
- react-native-router-flux
这是一个路由,可以用来做Android底部的导航栏,学Android的都知道,如果用原生的代码来 做导航栏,会很复杂,关系到很多复杂的知识. 接下来我就简单的说明一下如何插入和使用吧: 1.你要先依赖 ...
- emacs技巧
Table of Contents "ctrl space"设置mark 同时在选中的各行行首添加相同内容 寄存器 跳转到某行 删除光标所在的空格和TAB或空白行 把TAB全部转换 ...
- java-js知识库之一——canvas绘制9*9乘法表
不知不觉一年又要过去了,软件这一行入坑快两年了,一直不知道这两年干了些啥,也不知道自己到底会些什么,工作也是些简单的东西,谁都能做,对未来也是很茫然.今天和同事优化数据库,头都是懵的,很多东西都感觉似 ...
- volatile与synchronized有什么区别?
下列说法正确的是()? A.我们直接调用Thread对象的run方法会报异常,所以我们应该使用start方法来开启一个线程 B.一个进程是一个独立的运行环境,可以被看做一个程序或者一个应用.而线程是在 ...
- 三元运算和bytes数据类型笔记
三元运算 result = 值1 if条件 else 值2 如果条件为真:result = 值1 如果条件为假:result = 值2 bytes数据类型 字符串可以编码成字节包,字节包也可以解码成 ...
- 解决spring3升级到spring4后jackjson报错
1.这里说的是基于spring+springmvc+hibernate框架(其实跟持久层框架也没关系) 2.首先是springmvc的配置,处理json数据都会用到的.第5行是spring-4.x的写 ...
- HashMap 的put方法
final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] ta ...
- MySQL行转列、列转行
一.行转列 有如图所示的表,现在希望查询的结果将行转成列 建表语句如下: CREATE TABLE `TEST_TB_GRADE` ( `ID` int(10) NOT NULL AUTO_INCRE ...