swift基础-20-方法

隶属于每一个类或结构体的函数称之为方法:
方法分为类方法和实例方法, 对应OC中的 + - 方法
实例方法:实例方法一定是通过对象来调用的, 实例方法隶属于某一个类

class Person {
    var _name:String = "solozyx"
    var _age:Int = 99
    // 实例方法一定是通过对象来调用的, 实例方法隶属于某一个类
    // func setName(name:String, age:Int)
    // 如果不希望某个参数作为外部参数, 可以在参数前面加上_, 忽略外部参数
    func setName(name:String, _ age:Int)
    {
        _name = name
        _age = age
    }
    func show()
    {
        print("name = \(_name) age = \(_age)")
    }
}

var p = Person()
// 由于第一个参数可以通过方法名称指定, 所以默认第一个参数不作为外部参数
//p.setName("zs", age: 88) // 错误
p.setName("zs", 88)

//func setName(name:String, age:Int){
//func setName(name:String,myAge age:Int){
func setName(name:String, age:Int){
    
}
// 实例方法和函数的区别在于, 实例方法会自动将除第一个参数以外的其它参数即当做外部参数又当做内部参数, 而函数需要我们自己指定才会有外部参数, 默认没有
setName("ls", age:55)

self关键字, Swift中的self和OC中的self基本一样. self指当前对象, 如果self在对象方法中代表当前对象. 但是在类方法中没有self

class Person2 {
   var name:String = "solozyx"
   var age:Int = 99
   // 当参数名称和属性名称一模一样时, 无法区分哪个是参数哪个是属性, 这个时候可以通过self明确的来区分参数和属性
   func setName(name:String, age:Int)
   {
       // 默认情况下, _name和_age前面有一个默认的self关键字, 因为所有变量都需要先定义再使用, 而setName方法中并没有定义过_name和_age, 而是在属性中定义的, 所以setName中访问的其实是属性, 编译器默认帮我们在前面加了一个self.
       // _name = name
       // _age = age
       self.name = name
       self.age = age
   }
   func show()
   {
       print("name = \(name) age = \(age)")
   }
}

mutating方法
值类型(结构体和枚举)默认方法是不可以修改属性的, 如果需要修改属性, 需要在方法前加上mutating关键字, 让该方法变为一个改变方法

struct Person3 {
    var name:String = "solozyx"
    var age:Int = 99
    // 值类型(结构体和枚举)默认方法是不可以修改属性的, 如果需要修改属性, 需要在方法前加上mutating关键字, 让该方法变为一个改变方法
    // 注意: 类不需要, 因为类的实例方法默认就可以修改
    mutating func setName(name:String, age:Int)
    {
        self.name = name
        self.age = age
    }
    func show()
    {
        print("name = \(name) age = \(age)")
    }
}
var p3 = Person3()
p3.setName("zs", age: 99)
p3.show()
enum LightSwitch{
    case OFF, ON
    mutating func next()
    {
        switch self{
        case OFF:
            self = ON
        case ON:
            self = OFF
        }
    }
}
var ls:LightSwitch = LightSwitch.OFF
if ls == LightSwitch.OFF
{
    print("off")
}
ls.next()
if ls == LightSwitch.ON
{
    print("on")
}
struct Person4 {
    var name:String = "solozyx"
    static var card: String = "123456"
    func show()
    {
        print("name = \(self.name) card = \(Person4.card)")
    }
    static func staticShow()
    {
        // 类方法中没有self
        // print("name = \(self.name) card = \(Person.card)")
        
        // 静态方法对应OC中的+号方法, 和OC一样在类方法中不能访问非静态属性
        print("card = \(Person4.card)")
    }
}
var p4 = Person4()
p4.show()
Person4.staticShow()
class Person5 {
    var name:String = "solozyx"
    class var card: String {
        return "123456"
    }
    func show()
    {
        print("name = \(self.name) card = \(Person5.card)")
    }
    class func staticShow()
    {
        // 类方法中没有self
        // print("name = \(self.name) card = \(Person.card)")
        // 静态方法对应OC中的+号方法, 和OC一样在类方法中不能访问非静态属性
        print("card = \(Person5.card)")
    }
}
var p5 = Person5()
p5.show()
Person5.staticShow()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容