swift2.0学习之类型方法(类方法)

和oc类似,就是通过类本身调用方法,在方法(func)关键字前面用static修饰,如果父类允许子类重载方法,就用关键字class修饰

另外,在swift中你可以为类,结构体,枚举定义类方法,而不像oc,只可以类定义类方法

通过点语法调用类方法,下面举例子说明

首先我们规定一个游戏,可以记录玩家的名字,和玩家的等级(这里就需要一个类型属性),当玩家完成一个等级后,就解锁下一个等级,(这里要判断传进来的等级和玩家完成的最高等级),玩家就用类来表示创建,等级的事用结构体创建

struct LevelTracker {

    static var highestUnlockedLevel = 1

    static func unlockLevel(level: Int) {

        if level > highestUnlockedLevel { highestUnlockedLevel = level }
    }

    static func levelIsUnlocked(level: Int) -> Bool {
        return level <= highestUnlockedLevel
    }

    var currentLevel = 1
    mutating func advanceToLevel(level: Int) -> Bool {

        if LevelTracker.levelIsUnlocked(level) {
            currentLevel = level
            return true
        }else{
            return false
        }
    }

}

解释:(关卡默认为1)第一个函数就表示当传进来的值大于当前关卡时,更新当前玩家到达的最大关卡,完成解锁功能

第二个函数和第三个函数关联,就是判断玩家的当前关卡的值是多少

class Player {

    var trackLevel = LevelTracker()
    let playerName: String
    func completedLevel(level: Int) {

        LevelTracker.unlockLevel(level + 1)
        trackLevel.advanceToLevel(level + 1)
    }

    init(name: String) {
        playerName = name
    }
}

解释:这个就是一个类的定义了,包括玩家的名字,和玩家玩到的等级(关卡)

        var player = Player(name: "xiaoyu")
        player.completedLevel(1)
        print("highest unlocked level is now \(LevelTracker.highestUnlockedLevel)")

        player = Player(name: "rainShen")
        player.completedLevel(6)
        print("highest unlocked level is now \(LevelTracker.highestUnlockedLevel)")

        player = Player(name: "cainiao")
        guard player.trackLevel.advanceToLevel(6) else {
            print("level 6 has not been unlocked")
            return
        }
         print("play is now at level 6")

解释:当传进去的level的值为6时,表示玩家到达的最大关卡为7,cainiao的函数传进去的是6,所以不会走else语句,但是当传进去的值是大于6时,就会大于LevelTracker.highestUnlockedLevel的值,返回为false,所以这时会走else语句,大家可以自己试一试

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-01 10:41:17

swift2.0学习之类型方法(类方法)的相关文章

swift2.0学习之拓展

拓展:和oc的拓展方法功能差不多,就是给已经存在的类,结构体,枚举,协议类型增加新的方法 拓展语法: 用extension关键字声明: extension SomeType { // new functionality to add to SomeType goes here } 拓展可以: (1)添加计算型属性和计算属性 (2)提供新的构造器 (3)定义实例方法和类型方法 (4)定义下标 (5)定义和使用嵌套类型 (一)计算型属性 extension Double { var km: Doub

swift2.0学习之类型转换

(一)类型转换(type casting) 类型转换是检查类型实例的方式,也是把类型实例作为子类或者父类的方式 主要有三个关键词,is,as?,as!(as),is表示是某种类型(比如父类和子类同时出现,选择父类,就是表示层级比较大的那个类型),as表示的是向下转换(downcast)到子类本身,问号表示可选,叹号表示强拆包 举个例子: class MediaItem { var name: String init(name: String) { self.name = name } } cla

Swift2.0语言教程之类的方法

Swift2.0语言教程之类的方法 Swift2.0语言的方法 方法其实就是函数,只不过它被定义在了类中.在Swift中,根据被使用的方式不同,方法分为了实例方法和类型方法两种.这两种方法的定义也和Objective-C是不同的.本节依次讲解这两种方法. Swift2.0语言的实例方法 实例方法被定义在类中,但是由类的实例调用.所以,这类方法被称为实例方法.实例方法和函数一样,分为了不带参数和带参数两种.以下依次讲解这两种方法的使用. 1.不带参数的实例方法 不带参数的实例方法定义和函数的是一样

Swift2.0语言教程之函数的返回值与函数类型

Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数.以下将会对这两种函数类型进行讲解. Swift2.0中具有一个返回值的函数 开发者希望在函数中返回某一数据类型的值,必须要在函数声明定义时为函数设定一个返回的数据类型,并使用return语句进行返回.其中,return语句的一般表示形式如下: return 表达式 其中,表达式可以是符合Swift标准的任意表达式.而具有返回值的函数声明定义形式如下: fu

Swift2.0语言教程之类的属性

Swift2.0语言教程之类的属性 类 虽然函数可以简化代码,但是当一个程序中出现成百上千的函数和变量时,代码还是会显得很混乱.为此,人们又引入了新的类型--类.它是人们构建代码所用的一种通用.灵活的构造方式.本章将主要详细讲解类的使用. Swift2.0语言的类与对象 类是一种新的数据类型,类似于生活中犬类.猫类等等.而对象则是将这个抽象的类进行了具体化.例如,在犬类中,有哈士奇,金毛等等,这些就是犬类的具体化,即对象.本节将讲解类的创建以及如何将类进行具体化(即实例化)为对象. Swift2

C#学习笔记三: C#2.0泛型 可控类型 匿名方法和迭代器

前言 C#1.0的委托特性使方法作为其他方法的参数来传递,而C#2.0 中提出的泛型特性则使类型可以被参数化,从而不必再为不同的类型提供特殊版本的实现方法.另外C#2.0还提出了可空类型,匿名方法和迭代器3个优美的特性. 1,泛型1.1 泛型是什么泛型的英文表述是"generic", 这个单词意为通用的.从字面意思可知,泛型代表的就是"通用类型",它可以代替任意的数据类型,使类型参数化,从而达到之实现一个方法就可以操作多种数据类型的目的.泛型是将方法实现行为与方法操

Swift2.0(6)结构体类型&枚举类型

结构体类型 基础数据类型都是结构体,如Int  Float Bool等,是Swift自带的并且作为开发基础供开发者使用 在Swift中,结构体(Struct)和类类型(Class)非常相似,结构体是值类型,类是引用类型. 定义格式: struct 名称 : 协议... { 属性和方法 } 如: struct Sword { var length:Int = 11 var name:String = "hello world" func description() { print(&qu

深入学习golang(3)—类型方法

类型方法 在Go语言中,我们可以给任何类型(包括内置类型,但不包括指针和接口)定义方法.例如,在实际编程中,我们经常使用[ ]byte的切片,我们可以定义一个新的类型: type ByteSlice []byte 然后我们就可以定义方法了.例如,假如我们不想使用内建的append函数,我们可以实现一个自己的append方法: func Append(slice, data[]byte) []byte { l := len(slice) if l + len(data) > cap(slice)

Swift2.0(5)元组类型&数组类型&字典类型

元组类型 元组Tuple用来归纳多个归纳具有任意类型的相关联的值,如: var person = (30, "neusoft") print(person)     // (30, "neusoft") 该元组类型对象person的类型可以认为是:(Int, String) 如果想要获取元组中的某个数据,可以采用以下方式 方式一:可以将其中的数据关联到常量或变量中,如: let (age, name) = person print("age:\(age)