Swift基本语法2

接着昨天的接着写,直接上代码:
var point = (0, 10)
switch point{
case (0, _): //"_"代表可以忽略对应位置的值
    print("在y轴上")
case (_, 0):
    print("在x轴上")
default:
    print("other")
}
//要求枚举的每个值在命名时首字母要大写,且每个值不在隐视转换为0, 1等
enum Day {
    case AM
    case PM
}

let now = Day.AM
switch now {
case .AM :
    print("am")
case .PM :
    print("pm")
}
//函数
//函数的定义形式:
//func 方法名(参数列表)->返回值 {函数体}

//无参数无返回值
func sayHello() {
    print("hello world!")
}
sayHello()

//有参数无返回值
//函数默认第一个参数无标签,当参数为多个的时候,第二个参数开始有标签
func sayHello1(name:String, name1:String) {
    print("hello," + name + name1)
}
sayHello1("玉田", name1: "刘英")
//可以给参数设置一个默认值,当调用该函数时,如果给参数传参,则使用传进来的参数值,如果没有传参,则使用默认值
func sayHello2(name:String = "刘能", name1:String) {
    print("hello," + name + name1)
}
sayHello2("玉田", name1: "刘英")
//可以给参数加一个标签用于提示调用者
func sayHello3(personName1 name1:String, personName2 name2:String) {
    print("hello," + name1 + name2)
}
sayHello3(personName1: "刘英", personName2: "玉田")

//有参数有返回值
func sayHello4(name:String) -> String {
    return "hello," + name
}
sayHello4("赵四")
//多参数(不确定参数个数)
func 求和(numbers:Int...)->Int {
    var sum = 0
    for i in numbers {
        sum += i
    }
    return sum
}

求和(1,2,3)
//如果我们想要改变传过来的参数的值,需要将形参前加, inout关键字修饰
var value = 10
func changeVlue(inout number: Int) {
    number = 11
}
changeVlue(&value)
value
func 返回值元组(name:String, age:Int) -> (String, Int) {
    return (name, age)
}
let 元组 = 返回值元组("玉田", age: 99)
元组.0
//函数的返回值可以是一个函数,并且函数可以嵌套定义,嵌套定义时里层的小函数是有作用域的(外层大函数的范围内)

func 大函数(number:Int) -> (Int)->Int {
    func 小函数(numberSmall: Int)->Int{
        return number + numberSmall
    }
    return 小函数
}
let 得到的函数 = 大函数(1)
得到的函数(2)

//闭包
//闭包的声明:
//   (参数列表) ->返回值
//闭包的定义:
// {(参数列表)->返回值 in 函数体}


func compare(num: Int , array:[Int], 闭包比较:(num1: Int, num2:Int)-> Bool) -> [Int] {
    var arr = [Int]()
    for i in array {
        if 闭包比较(num1:i, num2:num) {
            arr .append(i)
        }
    }
    return arr
}
//完整的闭包定义
compare(3, array: [0, 1, 2, 3, 4, 5, 6],
        闭包比较:{(num1: Int, num2: Int)-> Bool in return num1 > num2} )
//闭包的参数类型可以省略,编译器可以根据我们输入的值结合声明自动识别它的数据类型
compare(3, array: [0, 1, 2, 3, 4, 5, 6],
        闭包比较:{(num1, num2)-> Bool in return num1 > num2} )
//返回值类型也可以省略
compare(3, array: [0, 1, 2, 3, 4, 5, 6],
        闭包比较:{(num1, num2) in return num1 > num2} )
//$0代表传人闭包的第0个参数,$1代表传人的第1个参数
compare(3, array: [0, 1, 2, 3, 4, 5, 6],
        闭包比较:{ return $0 > $1} )
//对于此案例,系统已经预定好了一些比较符号的意义,可以直接使用">"
compare(3, array: [0, 1, 2, 3, 4, 5, 6],
        闭包比较:>)
//推荐的方式
//尾随闭包
compare(3, array: [0, 1, 2, 3, 4, 5, 6])
        {(num1, num2)-> Bool in return num1 > num2
}

//结构体
//swift中的结构体和类特别的相似
//结构体可以向类一样定义构造方法,和自定义方法,甚至可以遵循协议
//不同点:结构体是值类型,类是引用类型;结构体不能被继承;结构体没有析构方法(swift中的析构方法相当于oc里的ARC下dealloc方法,用于销毁资源);
struct point1 {
    var x: Float = 0
    var y: Float = 0
    //构造方法(相当于我们以前的初始化方法)
//    init(myX:Float, myY:Float){
//        x = myX
//        y = myY
//    }
    func hello()  {
        print("hello")
    }
}

var p = point1(x:10, y:10)
p.x
p.hello()

struct Size {
    var width : Float = 0
    var height : Float = 0
    
}
//存储属性:用来存值
//计算属性:涉及到计算过程来获取,或通过计算影响其他值
struct Rect {
    var origin = point1()
    var size = Size(){
        willSet(setSize){
            print(setSize.width)
        }
        didSet{
            print("did")
        }
    }
    var center: point1{
        get{
            let centerX = origin.x + size.width / 2
            let centerY = origin.y + size.height / 2
            return point1(x: centerX, y:centerY)
        }
        set(newCenter){
            origin.x = newCenter.x - size.width / 2
            origin.y = newCenter.y - size.height / 2
        }
    }
    //当我们在结构体中的方法想要修改成员变量的值时,需要使用mutating 关键字(ps:类不需要加, 因为类中的成员变量的意义是对于类内透明的)
    mutating func foo() {
        size = Size(width: 300, height: 300)
    }
    
}

var frame = Rect(origin: point1(x: 100, y: 100), size: Size(width: 100, height: 100))
frame.center.x
frame.size = Size(width: 200, height: 200)
//类

class people {
    var name : String?//如果不使用可选类型的话,要求必须赋初值(ps:在init方法里或者在变量声明处直接赋初始值)
    var age : Int
    init(name:String, age:Int){
        self.name = name
        self.age = age
    }
    //析构方法
    deinit{
        //释放一些资源
    }
    func sayHello() {
        print("hello")
    }
    //类方法
    class func sayBeyBey() {
        print("bey bey")
    }
}

class Student: people {
    var studentNumber:Int?//ps:如果子类的属性没有在声明时赋初值且不是可选类型,在初始化方法里赋值操作要在调用super的init之前
    init(name: String, age: Int, studentNumber:Int){
        self.studentNumber = studentNumber
        super.init(name: name, age: age)
    }
    //重写父类的方法需要前面加override关键字
    override func sayHello() {
        print("hello, my name is " + self.name!)
    }
}

var stu = Student(name: "玉田", age: 99, studentNumber: 911)
stu.sayHello()
//协议

protocol A {
    func foo()
}
class B: Student, A {
    func foo() {
        print("foo")
    }
}
明天会用Swift写一些在项目中的具体用法.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容

  • Optional 可选项 文章原创。未经允许不得转载!写的可以给个赞,博主会发出更多关于Swi...
    洛斯也阅读 280评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,569评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,617评论 4 59
  • 在重庆,对腿脚不灵变的残疾人直呼“掰子”是非常不尊重的称呼, 但话可分两头说,若当事人不屈身残反而把“掰”当成自身...
    火锅老师阅读 349评论 0 1
  • 一、学经汇报: 学经日期:2017年3月14日 星期二 雨 宝贝年龄:8岁 学经时间:3年 学经人员:茹茹 茹爸...
    悦2017137阅读 518评论 2 3