雷火电竞-中国电竞赛事及体育赛事平台

歡迎來到入門教程網(wǎng)!

Swift

當(dāng)前位置:主頁 > 軟件編程 > Swift >

Swift中static和class關(guān)鍵字的深入講解

來源:本站原創(chuàng)|時(shí)間:2020-01-11|欄目:Swift|點(diǎn)擊:

前言

Swift中表示 “類型范圍作用域” 這一概念有兩個(gè)不同的關(guān)鍵字,它們分別是static和class。這兩個(gè)關(guān)鍵字確實(shí)都表達(dá)了這個(gè)意思,但是在其他一些語言,包括Objective-C中,我們并不會(huì)特別地區(qū)分類變量/類方法和靜態(tài)變量/靜態(tài)函數(shù)。但是在Swift中,這兩個(gè)關(guān)鍵字卻是不能用混的。

static和class

作用:這兩個(gè)關(guān)鍵字都是用來說明被修飾的屬性或者方法是類型(class/struct/enum)的,而不是類型實(shí)例的。

static 適用的場景(class/struct/enum)

  • 修飾存儲(chǔ)屬性
  • 修飾計(jì)算屬性
  • 修飾類型方法
struct Point {
 let x: Double
 let y: Double
// 修飾存儲(chǔ)屬性
 static let zero = Point(x: 0, y: 0)
// 修飾計(jì)算屬性
 static var ones: [Point] {
  return [Point(x: 1, y: 1)]
 }
// 修飾類型方法
 static func add(p1: Point, p2: Point) -> Point {
  return Point(x: p1.x + p2.x, y: p1.y + p2.y)
 }
}

class 適用的場景

  • 修飾類方法
  • 修飾計(jì)算屬性
class MyClass {
// 修飾計(jì)算屬性
 class var age: Int {
  return 10
 }
// 修飾類方法
 class func testFunc() {
  
 }
}

注意事項(xiàng)

class不能修飾類的存儲(chǔ)屬性,static可以修飾類的存儲(chǔ)屬性

//class let name = "jack" error: Class stored properties not supported in classes; did you mean 'static'?

在protocol中使用static來修飾類型域上的方法或者計(jì)算屬性,因?yàn)閟truct、enum、class都支持static,而struct和enum不支持class

protocol MyProtocol {
 static func testFunc()
}

struct MyStruct: MyProtocol {
 static func testFunc() {
  
 }
}

enum MyEnum: MyProtocol {
 static func testFunc() {
  
 }
}

class MyClass: MyProtocol {
 static func testFunc() {
  
 }
}

static修飾的類方法不能繼承;class修飾的類方法可以繼承

class MyClass {
 class func testFunc() {
  
 }
 
 static func testFunc1() {
  
 }
}

class MySubClass: MyClass {
 override class func testFunc() {
  
 }
 
// error: Cannot override static method
// override static func testFunc1() {
//
// }
}

單例

class SingleClass {
 static let shared = SingleClass()
 private init() {}
}

總結(jié)

  • static能修飾class/struct/enum的計(jì)算屬性、存儲(chǔ)屬性、類型方法;class能修飾類的計(jì)算屬性和類方法
  • static修飾的類方法不能繼承;class修飾的類方法可以繼承
  • 在protocol中要使用static

參考

  • Swift Tips
  • stackoverflow

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對我們的支持。

上一篇:在Swift中如何使用正則表達(dá)式詳解

欄    目:Swift

下一篇:深入講解Swift中的模式匹配

本文標(biāo)題:Swift中static和class關(guān)鍵字的深入講解

本文地址:http://www.jygsgssxh.com/a1/Swift/11933.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有