亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Swift > 正文

詳解Swift編程中的方法與屬性的概念

2020-03-09 17:52:37
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Swift編程中的方法與屬性的概念,是Swift入門學習中的基礎知識,需要的朋友可以參考下
 

方法
在 Swift 中特定類型的相關聯功能被稱為方法。在 Objective C 中類是用來定義方法,其中作為 Swift 語言為用戶提供了靈活性,類,結構和枚舉中可以定義使用方法。

實例方法
在 Swift 語言,類,結構和枚舉實例通過實例方法訪問。

  • 實例方法提供的功能
  • 訪問和修改實例屬性
  • 函數關聯實例的需要

實例方法可以寫在花括號 {} 內。它隱含的訪問方法和類實例的屬性。當該類型指定具體實例它調用獲得訪問該特定實例。

語法

復制代碼代碼如下:

func funcname(Parameters)-> returntype
{Statement1Statement2---Statement N
    return parameters
}

示例
復制代碼代碼如下:

class calculations {let a:Intlet b:Intlet res:Int
    
    init(a:Int, b:Int){self.a = a
        self.b = b
        res = a + b
    }
    
    func tot(c:Int)->Int{return res - c
    }
    
    func result(){
        println("Result is: /(tot(20))")
        println("Result is: /(tot(50))")}}let pri = calculations(a:600, b:300)
pri.result()

當我們使用 playground 運行上面的程序,得到以下結果

 

Result is: 880Result is: 850

Calculations 類定義了兩個實例方法:

init() 被定義為兩個數 a 和 b 相加,并將其結果存儲在'res'

tot() 用于通過從 “res” 值減去 'c'

最后,調用打印的計算a和b的值方法. 實例方法以 "." 語法訪問

局部和外部參數名稱
Swift 函數描述了局部和全局變量聲明。同樣,Swift 方法的命名規則也類似 Objective C。但是局部和全局參數名稱聲明的特性對于函數和方法不同。 swift 第一個參數是由介詞名稱'with', 'for' 和 'by' 訪問命名規則。

Swift 提供聲明作為局數參數名稱,其它參數名稱為全局參數名,第一參數是方法名稱。在這里,“no1”方法作為局部參數名來聲明。 'no2' 用于全局聲明,并通過該程序訪問。

復制代碼代碼如下:

class division {var count:Int=0
    func incrementBy(no1:Int, no2:Int){
        count = no1 / no2
        println(count)}}let counter = division()
counter.incrementBy(1800, no2:3)
counter.incrementBy(1600, no2:5)
counter.incrementBy(11000, no2:3)

當我們使用 playground 運行上面的程序,得到以下結果

 

6003203666

外部參數名稱使用 # 和 _ 符號
盡管 Swift 方法提供第一個參數名稱作為局部聲明,用戶必須提供以修改參數名稱從局部到全局聲明。這可以通過'#'符號前綴使用第一參數名來完成。通過這樣做,第一參數可以作為全局在整個模塊訪問。

當用戶需要使用外部名稱訪問在后面的參數名中,方法的名字使用“_”符號覆蓋。

復制代碼代碼如下:

class multiplication {var count:Int=0
    func incrementBy(#no1:Int, no2:Int){
        count = no1 * no2
        println(count)}}let counter = multiplication()
counter.incrementBy(no1:800, no2:3)
counter.incrementBy(no1:100, no2:5)
counter.incrementBy(no1:15000, no2:3)

當我們使用 playground 運行上面的程序,得到以下結果

 

240050045000

在方法中的Self屬性
方法有一個隱式屬性被稱為“self”,所有定義的類型實例所都有。“self”屬性被用于表示當前的實例定義的方法。

復制代碼代碼如下:

class calculations {let a:Intlet b:Intlet res:Int
    
    init(a:Int, b:Int){self.a = a
        self.b = b
        res = a + b
        println("Inside Self Block: /(res)")}
    
    func tot(c:Int)->Int{return res - c
    }
    
    func result(){
        println("Result is: /(tot(20))")
        println("Result is: /(tot(50))")}}let pri = calculations(a:600, b:300)let sum = calculations(a:1200, b:300)

 

pri.result()
sum.result()


當我們使用 playground 運行上面的程序,得到以下結果

 

Inside Self Block: 900Inside Self Block: 1500Result is: 880Result is: 850Result is: 1480Result is: 1450

修改的實例方法值類型
在 Swift 語言結構和枚舉和值類型不能由它的實例方法來改變。然而,swift 語言通過“變異”行為提供了靈活修改值類型。突變將使得在實例方法中的任何變化,將方法執行之后變化返回到原來的形式。此外,由 “selft” 屬性的新實例其隱式函數創建,執行之后將取代現有的方法

復制代碼代碼如下:

struct area {var length =1var breadth =1
    
    func area()->Int{return length * breadth
    }
    
    mutating func scaleBy(res:Int){
        length *= res
        breadth *= res
        
        println(length)
        println(breadth)}}var val = area(length:3, breadth:5)
val.scaleBy(3)
val.scaleBy(30)
val.scaleBy(300)

當我們使用 playground 運行上面的程序,得到以下結果

 

91527045081000135000

Self 屬性的不同誘變方法
突變方法結合 “self” 屬性分配給新實例所定義的方法。

復制代碼代碼如下:

struct area {var length =1var breadth =1
    
    func area()->Int{return length * breadth
    }
    
    mutating func scaleBy(res:Int){self.length *= res
        self.breadth *= res
        println(length)
        println(breadth)}}var val = area(length:3, breadth:5)
val.scaleBy(13)

當我們使用 playground 運行上面的程序,得到以下結果

 

3965

類型方法
當方法的特定實例調用,它調用一個實例方法并且當方法調用特定類型的方法的一個被定義為 "類型方法“。類型方法 “類” 是由“func”關鍵字和結構定義,和枚舉型方法使用 “func” 關鍵字之前的“static”關鍵字定義。

類型方法調用,是通過訪問 '.' 而不是調用特定實例的方法,例子和語法如下:

復制代碼代碼如下:

 classMath{class func abs(number:Int)->Int{if number <0{return(-number)}else{return number
        }}}struct absno
{static func abs(number:Int)->Int{if number <0{return(-number)}else{return number
        }}}letno=Math.abs(-35)let num = absno.abs(-5)

 

println(no)
println(num)


當我們使用 playground 運行上面的程序,得到以下結果

 

355

屬性
Swift 語言提供了類,枚舉或結構相關聯值的屬性。屬性可以被進一步分為存儲屬性和計算屬性。

存儲性能和計算屬性的區別

詳解Swift編程中的方法與屬性的概念

這兩種存儲和計算屬性與實例類型相關聯。當屬性與它的類型值相關聯,那么它定義為“類型屬性”。存儲和計算的屬性通常與一個特定類型的實例相關聯。然而,屬性也可以與類型本身相關聯。這樣的屬性是已知的類型的屬性。 屬性觀察者也被使用

觀察存儲的屬性值

觀察子類從父繼承而得的屬性

存儲屬性
Swift 介紹存儲的屬性概念用來存儲常量和變量的實例。常量存儲的屬性由 'let' 關鍵字定義和存儲變量的屬性由 “var” 關鍵字定義。

在定義存儲的屬性提供了“默認值”

在初始化期間用戶可以初始化和修改初始值

復制代碼代碼如下:

structNumber{var digits:Intlet pi =3.1415}var n =Number(digits:12345)
n.digits =67

 

println("/(n.digits)")
println("/(n.pi)")


當我們使用 playground 運行上面的程序,得到以下結果

 

673.1415

考慮在上面的代碼,如下面的一行:

復制代碼代碼如下:

let pi = 3.1415

這里,可變圓周率被初始化為存儲屬性值使用所述實例 pi = 3.1415. 所以,每當實例被稱為將持有單獨的值是:3.1415。

 

另一種方法,已存儲的屬性可能常量結構。這樣結構的整個實例將被認為是“常量屬性的存儲”。

復制代碼代碼如下:

structNumber{var digits:Intlet numbers =3.1415}var n =Number(digits:12345)
n.digits =67

 

println("/(n.digits)")
println("/(n.numbers)")
n.numbers =8.7


當我們使用 playground 運行上面的程序,得到以下結果

 

error: cannot assign to 'numbers' in 'n'n.numbers = 8.7

重新初始化'數字'為8.7,它將返回指示“數字''被聲明為常數的錯誤消息。

懶存儲屬性
Swift 提供了所謂的“懶存儲屬性',當變量被首次初始化它不會計算初始值. “lazy” 修飾符的變量聲明之前,把它作為一個懶存儲屬性。

延遲屬性被使用:

要延遲對象的創建。

當屬性是依賴于一個類的其他部分,即:尚未知道

復制代碼代碼如下:

class sample {
   lazy varno= number()// `var` declaration is required.}class number {var name ="Swift"}var firstsample = sample()
println(firstsample.no.name)

當我們使用 playground 運行上面的程序,我們得到以下結果
Swift
實例變量
在Objective C 中,存儲屬性還必須有實例變量用于備份目的,存放在存儲的屬性聲明的值。

 

Swift 集成了這些概念成一個“存儲的屬性”聲明。而不必有一個相應的實例變量和備份值'存儲屬性“,包含通過變量名一個位置定義的有關變量屬性所有信息集成,數據類型和存儲器管理功能。

計算屬性
而不是存儲計算的屬性值提供了一個getter和一個可選的 setter 間接來檢索和設置其他屬性和值。

復制代碼代碼如下:

class sample {var no1 =0.0, no2 =0.0var length =300.0, breadth =150.0var middle:(Double,Double){get{return(length /2, breadth /2)}set(axis){
         no1 = axis.0-(length /2)
         no2 = axis.1-(breadth /2)}}}var result = sample()
println(result.middle)
result.middle =(0.0,10.0)

 

println(result.no1)               
println(result.no2)


當我們使用 playground 運行上面的程序,我們得到以下結果

 

(150.0, 75.0)-150.0-65.0

當計算的屬性留下了新的值為未定義默認值將針對特定的變量來設置。

計算屬性為只讀屬性
在計算屬性只讀屬性被定義為 getter,但不是 setter。它總是用來返回一個值。變量通過使用 '.' 語法訪問,但不能被設置為其他值。

復制代碼代碼如下:

class film {var head =""var duration =0.0var metaInfo:[String:String]{return["head":self.head,"duration":"/(self.duration)"]}}var movie = film()
movie.head ="Swift Properties"
movie.duration =3.09

 

println(movie.metaInfo["head"]!)      
println(movie.metaInfo["duration"]!)


當我們使用 playground 運行上面的程序,我們得到以下結果

 

Swift Properties3.09

計算屬性屬性觀察者
在Swift 中使用屬性觀察者來觀察和設置屬性值響應。 當每一次屬性值設置屬性觀察者都被調用。 除了懶存儲屬性,我們可以通過添加屬性觀察者“繼承”屬性“覆蓋”方法。

在存放值之前 - willset

存儲新的值之后 - didset

當一個屬性被設置在初始化 willset 和 didset 觀察者不能調用。

復制代碼代碼如下:

classSamplepgm{var counter:Int=0{
      willSet(newTotal){
         println("Total Counter is: /(newTotal)")}
      didSet{if counter > oldValue {
            println("Newly Added Counter /(counter - oldValue)")}}}}letNewCounter=Samplepgm()NewCounter.counter =100NewCounter.counter =800

當我們使用 playground 運行上面的程序,我們得到以下結果

 

Total Counter is: 100Newly Added Counter 100Total Counter is: 800Newly Added Counter 700

局部和全局變量
對于計算和觀察屬性局部和全局變量的聲明。

詳解Swift編程中的方法與屬性的概念

類型屬性
屬性定義類型定義部分有大括號{},并且變量的范圍也被前面所定義。要定義值類型使用 “static” 關鍵字以及類的類型使用 “class” 關鍵字。

語法

復制代碼代碼如下:

structStructname{staticvar storedTypeProperty =" "staticvar computedTypeProperty:Int{// return an Int value here}}enumEnumname{staticvar storedTypeProperty =" "staticvar computedTypeProperty:Int{// return an Int value here}}classClassname{classvar computedTypeProperty:Int{// return an Int value here}}

查詢和設置屬性
類似于實例屬性類型屬性查詢和設置,只是使用 “.” 語法,而不用指向該實例的類型。
復制代碼代碼如下:

 structStudMarks{staticlet markCount =97staticvar totalCount =0varInternalMarks:Int=0{
      didSet {ifInternalMarks>StudMarks.markCount {InternalMarks=StudMarks.markCount
         }ifInternalMarks>StudMarks.totalCount {StudMarks.totalCount =InternalMarks}}}}var stud1Mark1 =StudMarks()var stud1Mark2 =StudMarks()

 

stud1Mark1.InternalMarks=98
println(stud1Mark1.InternalMarks)

stud1Mark2.InternalMarks=87
println(stud1Mark2.InternalMarks)


當我們使用 playground 運行上面的程序,我們得到以下結果

 

9787


注:相關教程知識閱讀請移步到swift教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美在线视频免费观看| 国产成人一区二| 亚洲图中文字幕| 国产美女扒开尿口久久久| 91免费视频网站| 日韩精品在线私人| 亚洲精品www久久久久久广东| 美女撒尿一区二区三区| 国产精品视频免费在线观看| 91精品视频在线免费观看| 国产97色在线| 久久琪琪电影院| 日韩不卡中文字幕| 91亚洲精品在线观看| 久久久这里只有精品视频| 亚洲аv电影天堂网| 裸体女人亚洲精品一区| 亚洲女人天堂av| 欧美精品videosex极品1| 91久久在线观看| 91精品国产免费久久久久久| 亚洲国模精品私拍| 国产91网红主播在线观看| 欧美成人激情视频| 中文字幕av一区二区三区谷原希美| 亚洲国产欧美日韩精品| 久久影视电视剧免费网站| 亚洲人a成www在线影院| 国产日韩欧美日韩大片| 国外成人免费在线播放| 久久成年人免费电影| 亚洲女人被黑人巨大进入| 岛国av一区二区三区| 久久国产精品影视| 97在线日本国产| 久久99久久亚洲国产| 精品视频中文字幕| 国产女人精品视频| 日韩亚洲一区二区| 欧美国产视频一区二区| 久久久国产视频91| 欧美精品久久久久久久| 午夜精品美女自拍福到在线| 国产精品偷伦视频免费观看国产| 亚洲国产欧美一区二区三区同亚洲| 姬川优奈aav一区二区| 成人免费自拍视频| 中文字幕在线视频日韩| 国产精品一区二区久久精品| 成人免费黄色网| 57pao国产成人免费| 欧美大学生性色视频| 日韩经典中文字幕| 91精品国产九九九久久久亚洲| 狠狠久久五月精品中文字幕| 亚洲精品国产suv| 日韩成人在线视频观看| 中文亚洲视频在线| 国产成人一区二区三区电影| 欧美第一黄色网| 欧美高清videos高潮hd| 久久香蕉频线观| 日韩av片永久免费网站| 精品国产一区二区三区久久狼5月| 亚洲精品一区二三区不卡| 成人精品一区二区三区电影黑人| 亚洲高清一二三区| 欧美激情国内偷拍| 国产精品视频网址| 国产99视频精品免视看7| 日本亚洲精品在线观看| 欧美一性一乱一交一视频| 国产丝袜一区二区| 久久久久久久久国产精品| 2019亚洲男人天堂| 亚洲视频在线观看免费| 大桥未久av一区二区三区| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲一区制服诱惑| 美女久久久久久久久久久| 国产一区二区三区在线| 国产精品免费网站| 欧美电影免费观看高清完整| 97在线日本国产| 欧美日韩成人精品| 97视频在线观看网址| 中文字幕自拍vr一区二区三区| 全亚洲最色的网站在线观看| 国产男人精品视频| 国产成人高清激情视频在线观看| 国产免费一区二区三区香蕉精| 亚洲xxxx视频| 中文字幕亚洲一区二区三区| 亚洲精品日韩激情在线电影| 97超碰国产精品女人人人爽| 色综合天天狠天天透天天伊人| 久久精品视频va| 久久九九亚洲综合| 国产欧美在线视频| 欧美日韩高清在线观看| 一区二区三区视频在线| 午夜精品久久久久久久99热浪潮| 国产成人福利网站| 亚洲丁香婷深爱综合| 亚洲欧美另类在线观看| 亚洲最大成人在线| 日韩激情在线视频| 亚洲第一网中文字幕| 欧美色欧美亚洲高清在线视频| 91久久久久久国产精品| 欧美激情在线观看视频| 亚洲免费一级电影| 97精品伊人久久久大香线蕉| 欧美小视频在线| 久久99热精品这里久久精品| 九九热视频这里只有精品| 91免费国产网站| 亚洲视频在线观看网站| 国产精品免费久久久久影院| 好吊成人免视频| 欧美日本中文字幕| 亚洲欧洲在线观看| 久久精品这里热有精品| 欧美与欧洲交xxxx免费观看| 国产精品激情av电影在线观看| 亚洲第一综合天堂另类专| 亚洲欧洲美洲在线综合| 欧美在线视频在线播放完整版免费观看| 欧美一级黑人aaaaaaa做受| 欧日韩在线观看| 欧美日韩aaaa| 亚洲视频电影图片偷拍一区| 国产精品视频白浆免费视频| 亚洲最新av在线网站| 91精品综合久久久久久五月天| 色播久久人人爽人人爽人人片视av| 最近日韩中文字幕中文| 日韩精品视频在线观看免费| 欧美成人中文字幕| 18性欧美xxxⅹ性满足| 国产精品永久免费观看| 亚洲精品国产精品国自产在线| 在线精品视频视频中文字幕| 欧美精品videos另类日本| 欧美精品做受xxx性少妇| 国产精品久久久精品| 欧美人在线视频| 秋霞午夜一区二区| 日韩成人免费视频| 欧美电影在线观看高清| 69久久夜色精品国产7777| 国产+成+人+亚洲欧洲| 亚洲视频日韩精品| 久久这里只有精品99| 日韩视频在线一区| 97精品国产aⅴ7777| 日韩精品视频在线| 亚洲一区二区免费在线| 国产精品av在线播放| 亚洲高清免费观看高清完整版| 777午夜精品福利在线观看| 欧美高清视频免费观看| 欧美猛少妇色xxxxx| 欧美性xxxx极品hd欧美风情|