swift - 方法

實(shí)例方法 是屬于特定類實(shí)例搁吓、結(jié)構(gòu)體實(shí)例或者枚舉實(shí)例的函數(shù)

//定義
class Counter {
    var count = 0
    func increment() {
        count += 1
    }
    func increment(by amount: Int) {
        count += amount
    }
    func reset() {
        count = 0
    }
}
//使用
let counter = Counter()
// the initial counter value is 0
counter.increment()
// the counter's value is now 1
counter.increment(by: 5)
// the counter's value is now 6
counter.reset()
// the counter's value is now 0

self 關(guān)鍵字

func increment() {
    self.count += 1
}
struct Point {
    var x = 0.0, y = 0.0
    func isToTheRightOf(x: Double) -> Bool {
        return self.x > x
    }
}
let somePoint = Point(x: 4.0, y: 5.0)
if somePoint.isToTheRightOf(x: 1.0) {
    print("This point is to the right of the line where x == 1.0")
}
// Prints "This point is to the right of the line where x == 1.0"

實(shí)例方法中修改值類型

// mutating 關(guān)鍵字

struct Point {
    var x = 0.0, y = 0.0
    mutating func moveByX(deltaX: Double, y deltaY: Double) {
        x += deltaX
        y += deltaY
    }
}
var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveBy(x: 2.0, y: 3.0)
print("The point is now at (\(somePoint.x), \(somePoint.y))")
let fixedPoint = Point(x: 3.0, y: 3.0)
fixedPoint.moveBy(x: 2.0, y: 3.0)
// this will report an error

在異變方法里指定自身

struct Point {
    var x = 0.0, y = 0.0
    mutating func moveBy(x deltaX: Double, y deltaY: Double) {
        self = Point(x: x + deltaX, y: y + deltaY)
    }
}
enum TriStateSwitch {
    case off, low, high
    mutating func next() {
        switch self {
        case .off:
            self = .low
        case .low:
            self = .high
        case .high:
            self = .off
        }
    }
}
var ovenLight = TriStateSwitch.low
ovenLight.next()
// ovenLight is now equal to .high
ovenLight.next()
// ovenLight is now equal to .off

類方法

// 你可以通過在 func關(guān)鍵字之前使用 static關(guān)鍵字來明確一個(gè)類型方法。類同樣可以使用 class關(guān)鍵字來允許子類重寫父類對(duì)類型方法的實(shí)現(xiàn)煌茬。
// 跟屬性一樣

class SomeClass {
    class func someTypeMethod() {
        // type method implementation goes here
    }
}
SomeClass.someTypeMethod()
struct LevelTracker {
    static var highestUnlockedLevel = 1
    var currentLevel = 1
    
    static func unlock(_ level: Int) {
        if level > highestUnlockedLevel { highestUnlockedLevel = level }
    }
    
    static func isUnlocked(_ level: Int) -> Bool {
        return level <= highestUnlockedLevel
    }
    
    @discardableResult
    mutating func advance(to level: Int) -> Bool {
        if LevelTracker.isUnlocked(level) {
            currentLevel = level
            return true
        } else {
            return false
        }
    }
}
class Player {
    var tracker = LevelTracker()
    let playerName: String
    func completedLevel(level: Int) {
        LevelTracker.unlockLevel(level + 1)
        tracker.advanceToLevel(level + 1)
    }
    init(name: String) {
        playerName = name
    }
}
var player = Player(name: "Argyrios")
player.complete(level: 1)
print("highest unlocked level is now \(LevelTracker.highestUnlockedLevel)")
// Prints "highest unlocked level is now 2"
player = Player(name: "Beto")
if player.tracker.advance(to: 6) {
    print("player is now on level 6")
} else {
    print("level 6 has not yet been unlocked")
}
// Prints "level 6 has not yet been unlocked"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末显熏,一起剝皮案震驚了整個(gè)濱河市散怖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌篮绰,老刑警劉巖后雷,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異吠各,居然都是意外死亡臀突,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門贾漏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來候学,“玉大人,你說我怎么就攤上這事纵散∈崧耄” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵伍掀,是天一觀的道長(zhǎng)掰茶。 經(jīng)常有香客問我,道長(zhǎng)蜜笤,這世上最難降的妖魔是什么濒蒋? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮把兔,結(jié)果婚禮上沪伙,老公的妹妹穿的比我還像新娘甸各。我一直安慰自己,他們只是感情好焰坪,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著聘惦,像睡著了一般某饰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上善绎,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天黔漂,我揣著相機(jī)與錄音,去河邊找鬼禀酱。 笑死炬守,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剂跟。 我是一名探鬼主播减途,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼曹洽!你這毒婦竟也來了鳍置?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤送淆,失蹤者是張志新(化名)和其女友劉穎税产,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偷崩,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡辟拷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了阐斜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衫冻。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖谒出,靈堂內(nèi)的尸體忽然破棺而出羽杰,到底是詐尸還是另有隱情,我是刑警寧澤到推,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布考赛,位于F島的核電站,受9級(jí)特大地震影響莉测,放射性物質(zhì)發(fā)生泄漏颜骤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一捣卤、第九天 我趴在偏房一處隱蔽的房頂上張望忍抽。 院中可真熱鬧八孝,春花似錦、人聲如沸鸠项。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祟绊。三九已至楼入,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間牧抽,已是汗流浹背嘉熊。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扬舒,地道東北人阐肤。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像讲坎,于是被迫代替她去往敵國(guó)和親孕惜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 方法是與某些特定類型相關(guān)聯(lián)的函數(shù)晨炕。類诊赊、結(jié)構(gòu)體、枚舉都可以定義實(shí)例方法府瞄;實(shí)例方法為特定類型的實(shí)例封裝具體的任務(wù)與功能...
    EndEvent閱讀 613評(píng)論 3 5
  • Swift 方法是與某些特定類型相關(guān)聯(lián)的函數(shù) 在 Objective-C 中碧磅,類是唯一能定義方法的類型。但在 Sw...
    零度_不結(jié)冰閱讀 316評(píng)論 0 0
  • 在Swift中遵馆,類鲸郊,結(jié)構(gòu)體,枚舉货邓,都能定義實(shí)例方法秆撮。 結(jié)構(gòu)和枚舉可以在Swift中定義方法的事實(shí)是與C和Objec...
    Joker_King閱讀 488評(píng)論 0 0
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,820評(píng)論 1 10
  • 姓名: 張娟 公司: 路易彬彥 【日精進(jìn)打卡第61天】 【知~學(xué)習(xí)】 《六項(xiàng)精進(jìn)》2遍共88遍 《大學(xué)》0遍 共5...
    路易彬彥張娟閱讀 180評(píng)論 0 0