最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Swift教程之屬性詳解

 更新時(shí)間:2015年01月12日 14:34:20   投稿:junjie  
這篇文章主要介紹了Swift教程之屬性詳解,屬性是描述特定類、結(jié)構(gòu)或者枚舉的值,計(jì)算屬性存在于類、結(jié)構(gòu)與枚舉中,存儲(chǔ)屬性僅僅只在類與結(jié)構(gòu)中,需要的朋友可以參考下

屬性是描述特定類、結(jié)構(gòu)或者枚舉的值。存儲(chǔ)屬性作為實(shí)例的一部分存儲(chǔ)常量與變量的值,而計(jì)算屬性計(jì)算他們的值(不只是存儲(chǔ))。計(jì)算屬性存在于類、結(jié)構(gòu)與枚舉中。存儲(chǔ)屬性僅僅只在類與結(jié)構(gòu)中。

屬性通常與特定類型實(shí)例聯(lián)系在一起。但屬性也可以與類型本身聯(lián)系在一起,這樣的屬性稱之為類型屬性。

另外,可以定義屬性觀察者來處理屬性值發(fā)生改變的情況,這樣你就可以對(duì)用戶操作做出反應(yīng)。屬性觀察者可以被加在自己定義的存儲(chǔ)屬性之上,也可以在從父類繼承的子類屬性之上。

1、存儲(chǔ)屬性

最簡(jiǎn)單的情形,作為特定類或結(jié)構(gòu)實(shí)例的一部分,存儲(chǔ)屬性存儲(chǔ)著常量或者變量的值。存儲(chǔ)屬性可分為變量存儲(chǔ)屬性(關(guān)鍵字var描述)和常量存儲(chǔ)屬性(關(guān)鍵字let描述)。

當(dāng)定義存儲(chǔ)屬性時(shí),你可以提供一個(gè)默認(rèn)值,這些在“默認(rèn)屬性值”描述。在初始化過程中你也可以設(shè)置或改變存儲(chǔ)屬性的初值。這個(gè)準(zhǔn)則對(duì)常量存儲(chǔ)屬性也同樣適用(在“初始化過程中改變常量屬性”描述)

下面的例子定義了一個(gè)叫FixedLengthRange的結(jié)構(gòu),它描述了一個(gè)一定范圍內(nèi)的整數(shù)值,當(dāng)創(chuàng)建這個(gè)結(jié)構(gòu)時(shí),范圍長(zhǎng)度是不可以被改變的:

復(fù)制代碼 代碼如下:

struct FixedLengthRange {
var firstValue: Int
let length: Int
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
// the range represents integer values 0, 1, and 2
rangeOfThreeItems.firstValue = 6
// the range now represents integer values 6, 7, and 8

FixedLengthRange的實(shí)例包含一個(gè)名為firstValue的變量存儲(chǔ)屬性和名為length的常量存儲(chǔ)屬性。以上的例子中,當(dāng)范圍確定,length被初始化之后它的值是不可以被改變的

常量結(jié)構(gòu)實(shí)例的存儲(chǔ)屬性
如果你創(chuàng)建一個(gè)結(jié)構(gòu)實(shí)例,并將其賦給一個(gè)常量,這個(gè)實(shí)例中的屬性將不可以被改變,即使他們被聲明為變量屬性

復(fù)制代碼 代碼如下:
 
let rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4)
// this range represents integer values 0, 1, 2, and 3
rangeOfFourItems.firstValue = 6
// this will report an error, even thought firstValue is a variable property

因?yàn)閞angeOfFourItems是一個(gè)常量(let),即便firstValue是一個(gè)變量屬性,它的值也是不可以被改變的

這樣的特性是因?yàn)榻Y(jié)構(gòu)是值類型。當(dāng)一個(gè)值類型實(shí)例作為常量而存在,它的所有屬性也作為常量而存在。

而這個(gè)特性對(duì)類并不適用,因?yàn)轭愂且妙愋?。如果你將引用類型的?shí)例賦值給常量,依然能夠改變實(shí)例的變量屬性。

Lazy Stored Properties(懶惰存儲(chǔ)屬性?)

懶惰存儲(chǔ)屬性是當(dāng)它第一次被使用時(shí)才進(jìn)行初值計(jì)算。通過在屬性聲明前加上@lazy來標(biāo)識(shí)一個(gè)懶惰存儲(chǔ)屬性。

注意

必須聲明懶惰存儲(chǔ)屬性為變量屬性(通過var),因?yàn)樗某跏贾抵钡綄?shí)例初始化完成之后才被檢索。常量屬性在實(shí)例初始化完成之前就應(yīng)該被賦值,因此常量屬性不能夠被聲明為懶惰存儲(chǔ)屬性。

當(dāng)屬性初始值因?yàn)橥獠吭颍趯?shí)例初始化完成之前不能夠確定時(shí),就要定義成懶惰存儲(chǔ)屬性。當(dāng)屬性初始值需要復(fù)雜或高代價(jià)的設(shè)置,在它需要時(shí)才被賦值時(shí),懶惰存儲(chǔ)屬性就派上用場(chǎng)了。

下面的例子使用懶惰存儲(chǔ)屬性來防止類中不必要的初始化操作。它定義了類DataImporter和類DataManager:

復(fù)制代碼 代碼如下:

class DataImporter {
/*DataImporter is a class to import data from an external file.     The class is assumed to take a non-trivial amount of time to initialize.*/
var fileName = "data.txt"
// the DataImporter class would provide data importing functionality here
}
class DataManager {
@lazy var importer = DataImporter()
var data = String[]()
// the DataManager class would provide data management functionality here
}
let manager = DataManager()
manager.data += "Some data"
manager.data += "Some more data"
// the DataImporter instance for the importer property has not yet been created

類DataManager有一個(gè)稱為data的存儲(chǔ)屬性,它被初始化為一個(gè)空的String數(shù)組。雖然DataManager定義的其它部分并沒有寫出來,但可以看出DataManager的目的是管理String數(shù)據(jù)并為其提供訪問接口。

DataManager類的部分功能是從文件中引用數(shù)據(jù)。這個(gè)功能是由DataImporter類提供的,這個(gè)類需要一定的時(shí)間來初始化,因?yàn)樗膶?shí)例需要打開文件并見內(nèi)容讀到內(nèi)存中。

因?yàn)镈ataManager實(shí)例可能并不需要立即管理從文件中引用的數(shù)據(jù),所以在DataManager實(shí)例被創(chuàng)建時(shí),并不需要馬上就創(chuàng)建一個(gè)新的DataImporter實(shí)例。這就使得當(dāng)DataImporter實(shí)例在需要時(shí)才被創(chuàng)建理所當(dāng)然起來。

因?yàn)楸宦暶鳛锧lazy屬性,DataImporter的實(shí)例importer只有在當(dāng)它在第一次被訪問時(shí)才被創(chuàng)建。例如它的fileName屬性需要被訪問時(shí):

復(fù)制代碼 代碼如下:

println(manager.importer.fileName)
// the DataImporter instance for the importer property has now been created
// prints "data.txt

存儲(chǔ)屬性與實(shí)例變量

如果你使用過Objective-C,你應(yīng)該知道它提供兩種方式來存儲(chǔ)作為類實(shí)例一部分的值與引用。除了屬性,你可以使用實(shí)例變量作為屬性值的后備存儲(chǔ)

Swift使用一個(gè)單一屬性聲明來統(tǒng)一這些概念。一個(gè)Swift屬性沒有與之相符的實(shí)例變量,并且屬性的后備存儲(chǔ)也不能直接訪問。這防止了在不通上下文中訪問值的混淆,并且簡(jiǎn)化屬性聲明成為一個(gè)單一的、最終的語句。關(guān)于屬性的所有信息-包含名稱、類型和內(nèi)存管理等-作為類型定義的一部分而定義。

2、計(jì)算屬性

除了存儲(chǔ)屬性,類、結(jié)構(gòu)和枚舉能夠定義計(jì)算屬性。計(jì)算屬性并不存儲(chǔ)值,它提供getter和可選的setter來間接地獲取和設(shè)置其它的屬性和值。

復(fù)制代碼 代碼如下:

struct Point {
var x = 0.0, y = 0.0
}
struct Size {
var width = 0.0, height = 0.0
}
struct Rect {
var origin = Point()
var size = Size()
var center: Point {
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set(newCenter) {
origin.x = newCenter.x - (size.width / 2)
origin.y = newCenter.y - (size.height / 2)
}
}
}
var square = Rect(origin: Point(x: 0.0, y: 0.0),size: Size(width: 10.0, height: 10.0))
let initialSquareCenter = square.center
square.center = Point(x: 15.0, y: 15.0)
println("square.origin is now at (\(square.origin.x), \(square.origin.y))")
// prints "square.origin is now at (10.0, 10.0)"

這個(gè)例子定義了三個(gè)處理幾何圖形的結(jié)構(gòu):

Point包含一個(gè)(x,y)坐標(biāo)
Size包含寬度width和高度height
Rect定義了一個(gè)長(zhǎng)方形,包含原點(diǎn)和大小size
Rect結(jié)構(gòu)包含一個(gè)稱之為center的計(jì)算屬性。Rect當(dāng)前中心點(diǎn)的坐標(biāo)可以通過origin和size屬性得來,所以并不需要顯式地存儲(chǔ)中心點(diǎn)的值。取而代之的是,Rect定義一個(gè)稱為center的計(jì)算屬性,它包含一個(gè)get和一個(gè)set方法,通過它們來操作長(zhǎng)方形的中心點(diǎn),就像它是一個(gè)真正的存儲(chǔ)屬性一樣。

例子中定義了一個(gè)名為square的Rect變量,它的中心點(diǎn)初始化為(0, 0),高度和寬度初始化為10,由以下圖形中的藍(lán)色正方形部分。

變量square的center屬性通過點(diǎn)操作符訪問,它會(huì)調(diào)用center的getter方法。不同于直接返回一個(gè)存在的值,getter方法要通過計(jì)算才能返回長(zhǎng)方形的中心點(diǎn)的值(point)。以上的例子中,getter方法返回中心點(diǎn)(5,5)。

然后center屬性被設(shè)置成新的值(15,15),這樣就把這個(gè)正方形向右向上移動(dòng)到了途中黃色部分所表示的新的位置。通過調(diào)用setter方法來設(shè)置center,改變origin中坐標(biāo)x和y的值,將正方形移動(dòng)到新的位置。

setter聲明的簡(jiǎn)略寫法

如果計(jì)算屬性的setter方法沒有將被設(shè)置的值定義一個(gè)名稱,將會(huì)默認(rèn)地使用newValue這個(gè)名稱來代替。下面的例子采用了這樣一種特性,定義了Rect結(jié)構(gòu)的新版本:

復(fù)制代碼 代碼如下:

struct AlternativeRect {
var origin = Point()
var size = Size()
var center: Point {
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set {
origin.x = newValue.x - (size.width / 2)
origin.y = newValue.y - (size.height / 2)
}
}
}

只讀計(jì)算屬性

只讀計(jì)算屬性只帶有一個(gè)getter方法,通過點(diǎn)操作符,可以放回屬性值,但是不能修改它的值。
注意
應(yīng)該使用var關(guān)鍵字將計(jì)算屬性-包含只讀計(jì)算屬性-定義成變量屬性,因?yàn)樗鼈兊闹挡⒉皇枪潭ǖ?。let關(guān)鍵字只被常量屬性說使用,以表明一旦被設(shè)置它們的值就是不可改變的了

通過移除get關(guān)鍵字和它的大括號(hào),可以簡(jiǎn)化只讀計(jì)算屬性的定義:

復(fù)制代碼 代碼如下:

struct Cuboid {
var width = 0.0, height = 0.0, depth = 0.0
var volume: Double {
return width * height * depth
}
}
let fourByFiveByTwo = Cuboid(width: 4.0, height: 5.0, depth: 2.0)
println("the volume of fourByFiveByTwo is \(fourByFiveByTwo.volume)")
// prints "the volume of fourByFiveByTwo is 40.0

這個(gè)例子定義了一個(gè)三維長(zhǎng)方體結(jié)構(gòu)Cuboid,包含了長(zhǎng)寬高三個(gè)屬性,和一個(gè)表示長(zhǎng)方體容積的只讀計(jì)算屬性volume。volume值是不可被設(shè)置的,因?yàn)樗苯佑砷L(zhǎng)寬高三個(gè)屬性計(jì)算而來。通過提供這樣一個(gè)只讀計(jì)算屬性,Cuboid使外部用戶能夠訪問到其當(dāng)前的容積值。

3、屬性觀察者

屬性觀察者觀察屬性值的改變并對(duì)此做出響應(yīng)。當(dāng)設(shè)置屬性的值時(shí),屬性觀察者就被調(diào)用,即使當(dāng)新值同原值相同時(shí)也會(huì)被調(diào)用。

除了懶惰存儲(chǔ)屬性,你可以為任何存儲(chǔ)屬性加上屬性觀察者定義。另外,通過重寫子類屬性,也可以繼承屬性(存儲(chǔ)或計(jì)算)加上屬性觀察者定義。屬性重寫在“重寫”章節(jié)定義。

注意
不必為未重寫的計(jì)算屬性定義屬性觀察者,因?yàn)榭梢酝ㄟ^它的setter方法直接對(duì)值的改變做出響應(yīng)

定義屬性的觀察者時(shí),你可以單獨(dú)或同時(shí)使用下面的方法:
willSet:設(shè)置值前被調(diào)用
didSet:設(shè)置值后立刻被調(diào)用

當(dāng)實(shí)現(xiàn)willSet觀察者時(shí),新的屬性值作為常量參數(shù)被傳遞。你可以為這個(gè)參數(shù)起一個(gè)名字,如果不的話,這個(gè)參數(shù)就默認(rèn)地被命名成newValue。

在實(shí)現(xiàn)didSet觀察者時(shí)也是一樣,只不過傳遞的產(chǎn)量參數(shù)表示的是舊的屬性值。

注意:
屬性初始化時(shí),willset和didSet并不會(huì)被調(diào)用。只有在初始化上下文之外,當(dāng)設(shè)置屬性值時(shí)才被調(diào)用

下面是一個(gè)willSet和didSet用法的實(shí)例。定義了一個(gè)類StepCounter,用來統(tǒng)計(jì)人走路時(shí)的步數(shù)。它可以從計(jì)步器或其它計(jì)數(shù)器上獲取輸入數(shù)據(jù),對(duì)日常聯(lián)系鍛煉的步數(shù)進(jìn)行追蹤。

復(fù)制代碼 代碼如下:

class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
println("About to set totalSteps to \(newTotalSteps)")
}
didSet {
if totalSteps > oldValue  {
println("Added \(totalSteps - oldValue) steps")
}
}
}
}
let stepCounter = StepCounter()
stepCounter.totalSteps = 200
// About to set totalSteps to 200
// Added 200 steps
stepCounter.totalSteps = 360
// About to set totalSteps to 360
// Added 160 steps
stepCounter.totalSteps = 896
// About to set totalSteps to 896
// Added 536 steps

類StepCounter聲明了一個(gè)Int類型的、含有willSet和didSet觀察者的存儲(chǔ)屬性totalSteps。當(dāng)這個(gè)屬性被賦予新值時(shí),willSet和didSet將會(huì)被調(diào)用,即使新值和舊值是相同的。

例子中的willSet觀察者為參數(shù)起了個(gè)新的名字newTotalSteps,它簡(jiǎn)單地打印了即將被設(shè)置的值。

當(dāng)totalSteps值被更新時(shí),didSet觀察者被調(diào)用,它比較totalSteps的新值和舊值,如果新值比舊值大,就打印所增加的步數(shù)。didSet并沒有為舊值參數(shù)命名,在本例中,將會(huì)使用默認(rèn)的名字oldValue來表示舊的值。

注意

如果通過didSet來設(shè)置屬性的值,即使屬性值剛剛被設(shè)置過,起作用的也將會(huì)是didSet,即新值是didSet設(shè)置的值

4、全局和局部變量

以上所寫的關(guān)于計(jì)算與觀察屬性值的特性同樣適用于全局和局部變量。全局變量是在任何函數(shù)、方法、閉包、類型上下文外部定義的變量,而局部變量是在函數(shù)、方法、閉包中定義的變量。

前面章節(jié)所遇到過的全局、局部變量都是存儲(chǔ)變量。和存儲(chǔ)屬性一樣,存儲(chǔ)變量為特定類型提供存儲(chǔ)空間并且可以被訪問

但是,你可以在全局或局部范圍定義計(jì)算變量和存儲(chǔ)變量觀察者。計(jì)算變量并不存儲(chǔ)值,只用來計(jì)算特定值,它的定義方式與計(jì)算屬性一樣。

注意
全局常量和變量通常是延遲計(jì)算的,跟懶惰存儲(chǔ)屬性一樣,但是不需要加上@lazy。而局部常量與變量不是延遲計(jì)算的。

5、類型屬性

實(shí)例屬性是特定類型實(shí)例的屬性。當(dāng)創(chuàng)建一個(gè)類型的實(shí)例時(shí),這個(gè)實(shí)例有自己的屬性值的集合,這將它與其它實(shí)例區(qū)分開來。

也可以定義屬于類型本身的屬性,即使創(chuàng)建再多的這個(gè)類的實(shí)例,這個(gè)屬性也不屬于任何一個(gè),它只屬于類型本身,這樣的屬性就稱為類型屬性。

類型屬性適用于定義那些特定類型實(shí)例所通用的屬性,例如一個(gè)可以被所有實(shí)例使用的常量屬性(就像c中的靜態(tài)常量),或者變量屬性(c中的靜態(tài)變量)。

可以為值類型(結(jié)構(gòu)、枚舉)定義存儲(chǔ)類型屬性和計(jì)算類型屬性。對(duì)類而言,只能夠定義計(jì)算類型屬性。

值類型的存儲(chǔ)類型屬性可以是常量也可以是變量。而計(jì)算類型屬性通常聲明成變量屬性,類似于計(jì)算實(shí)例屬性

注意
不想存儲(chǔ)實(shí)例屬性,你需要給存儲(chǔ)類型屬性一個(gè)初始值。因?yàn)轭愋捅旧碓诔跏蓟瘯r(shí)不能為存儲(chǔ)類型屬性設(shè)置值

類型屬性句法

在C和Objective-C中,定義靜態(tài)常量、變量和全局靜態(tài)變量一樣。但是在swift中,類型屬性的定義要放在類型定義中進(jìn)行,在類型定義的大括號(hào)中,顯示地聲明它在類型中的作用域。

對(duì)值類型而言,定義類型屬性使用static關(guān)鍵字,而定義類類型的類型屬性使用class關(guān)鍵字。下面的例子展示了存儲(chǔ)和計(jì)算類型屬性的用法:

復(fù)制代碼 代碼如下:

struct SomeStructure {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
// return an Int value here
}
}
enum SomeEnumeration {
static var storedTypeProperty = "Some value."     static var computedTypeProperty: Int {     // return an Int value here
}
}
class SomeClass {
class var computedTypeProperty: Int {
// return an Int value here
}
}

注意

上面的例子是針對(duì)只讀計(jì)算類型屬性而言的,不過你也可以像計(jì)算實(shí)例屬性一樣定義可讀可寫的計(jì)算類型屬性

查詢與設(shè)置類型屬性

像實(shí)例屬性一樣,類型屬性通過點(diǎn)操作符來查詢與設(shè)置。但是類型屬性的查詢與設(shè)置是針對(duì)類型而言的,并不是針對(duì)類型的實(shí)例。例如:

復(fù)制代碼 代碼如下:

println(SomeClass.computedTypeProperty)
// prints "42"
println(SomeStructure.storedTypeProperty)
// prints "Some value."
SomeStructure.storedTypeProperty = "Another value."
println(SomeStructure.storedTypeProperty)
// prints "Another value.

下面的例子在一個(gè)結(jié)構(gòu)中使用兩個(gè)存儲(chǔ)類型屬性來展示一組聲音通道的音頻等級(jí)表。每個(gè)通道使用0到10來表示聲音的等級(jí)。

從下面的圖表中可以看出,使用了兩組聲音通道來表示一個(gè)立體聲音頻等級(jí)表。當(dāng)一個(gè)通道的等級(jí)為0時(shí),所有的燈都不會(huì)亮,當(dāng)?shù)燃?jí)為10時(shí),所有的燈都會(huì)亮。下面的圖中,左邊的通道表示聲音等級(jí)為9,右邊的為7

上述的聲音通道由以下的AudioChannel結(jié)構(gòu)實(shí)例來表示:

復(fù)制代碼 代碼如下:

struct AudioChannel {
static let thresholdLevel = 10
static var maxInputLevelForAllChannels = 0
var currentLevel: Int = 0 {
didSet {
if currentLevel > AudioChannel.thresholdLevel {
//cap the new audio level to the threshold level
currentLevel = AudioChannel.thresholdLevel
}
if currentLevel > AudioChannel.maxInputLevelForAllChannels {
// store this as the new overall maximum input level
AudioChannel.maxInputLevelForAllChannels = currentLevel
}
}
}
}

AudioChannel結(jié)構(gòu)定義了兩個(gè)存儲(chǔ)類型屬性。thresholdLevel定義了音頻所能達(dá)到的最高等級(jí),對(duì)所有的AudoChannel實(shí)例而言,是個(gè)值為10的常量。當(dāng)一個(gè)聲音信號(hào)的值超過10時(shí),會(huì)被截?cái)酁槠溟撝?0。

第二個(gè)類型屬性是一個(gè)變量存儲(chǔ)屬性maxInputLevelForAllChannels。它保存了當(dāng)前所有AudioChannel實(shí)例中所接受到聲音的最高等級(jí),它被初始化為0。

結(jié)構(gòu)還定義了一個(gè)存儲(chǔ)實(shí)例屬性currentLevel,表示當(dāng)前的通道聲音等級(jí)。這個(gè)屬性使用didSet屬性觀察者來檢測(cè)currentLevel的改變。這個(gè)觀察者執(zhí)行兩道檢查:

如果currentlevel的新值比閾值thresholdLevel大,currentLevel將被設(shè)置成thresholdLevel
如果currentLevel的新值比所有AudioChannel實(shí)例之前接受到的最大聲音等級(jí)還要大,那么maxInputLevelForAllChannles將會(huì)被設(shè)置成cueentLevel大值。

注意

第一道檢查中,didSet為currentLevel設(shè)置了新值。這并不會(huì)造成觀察者再次被調(diào)用

可以創(chuàng)建兩個(gè)AudioChannel實(shí)例,leftChannel和rightChannel,來表示一個(gè)立體聲系統(tǒng):

復(fù)制代碼 代碼如下:

var leftChannel = AudioChannel()
var rightChannel = AudioChannel()

如果設(shè)置左通道的currentLevel為7,它的類型屬性maxInputLevelForAllChannels將更新成為7:

復(fù)制代碼 代碼如下:

leftChannel.currentLevel = 7
println(leftChannel.currentLevel)
// prints "7"
println(AudioChannel.maxInputLevelForAllChannels)
// prints "7”
 
如果像設(shè)置右通道的currentlevel為11,它的值將被截短成為10,而且maxInputLevelForAllChannels的值也將更新為10:
“rightChannel.currentLevel = 11
println(rightChannel.currentLevel)
// prints "10"
println(AudioChannel.maxInputLevelForAllChannels)
// prints "10"

相關(guān)文章

  • 淺析Swift中struct與class的區(qū)別(匯編角度底層分析)

    淺析Swift中struct與class的區(qū)別(匯編角度底層分析)

    這篇文章主要介紹了Swift中struct與class的區(qū)別 ,本文從匯編角度分析struct與class的區(qū)別,通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Swift設(shè)計(jì)思想Result<T>與Result<T,?E:?Error>類型解析

    Swift設(shè)計(jì)思想Result<T>與Result<T,?E:?Error>類型解析

    這篇文章主要為大家介紹了Swift設(shè)計(jì)思想Result<T>與Result<T,?E:?Error>的類型示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Swift中添加雙擊手勢(shì)識(shí)別器

    Swift中添加雙擊手勢(shì)識(shí)別器

    在這次IOS應(yīng)用開發(fā)教程中,我們打算實(shí)現(xiàn)手勢(shì)識(shí)別。正如你所知道的,IOS支持大量的手勢(shì)操作,它們能提供了很好的應(yīng)用控制和出色用戶體驗(yàn)。
    2019-08-08
  • Swift調(diào)用Objective-C代碼

    Swift調(diào)用Objective-C代碼

    目前Swift語言所編寫的應(yīng)用才剛剛可以使用Xcode 6 GM版本提交,而Objective-C作為蘋果的主開發(fā)語言存在了很多年了。目前尚無成熟的Swift庫可用,所以當(dāng)前編寫應(yīng)用可以說基本離不開調(diào)用Objective-C代碼的情況。
    2014-09-09
  • swift中c風(fēng)格的for循環(huán)執(zhí)行效率

    swift中c風(fēng)格的for循環(huán)執(zhí)行效率

    這篇文章主要介紹了swift中c風(fēng)格的for循環(huán)執(zhí)行效率 的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • swift中正確安全聲明一個(gè)單例的方法實(shí)例

    swift中正確安全聲明一個(gè)單例的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于swift中如何正確安全聲明一個(gè)單例的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Swift Access Control訪問控制與斷言詳細(xì)介紹

    Swift Access Control訪問控制與斷言詳細(xì)介紹

    這篇文章主要介紹了Swift Access Control訪問控制與斷言,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • 純swift實(shí)現(xiàn)ipad版簡(jiǎn)單美團(tuán)界面功能

    純swift實(shí)現(xiàn)ipad版簡(jiǎn)單美團(tuán)界面功能

    這篇文章主要為大家詳細(xì)介紹了純swift實(shí)現(xiàn)ipad版簡(jiǎn)單美團(tuán)界面功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Swift 使用 Observe 監(jiān)測(cè)頁面滾動(dòng)的實(shí)現(xiàn)方法

    Swift 使用 Observe 監(jiān)測(cè)頁面滾動(dòng)的實(shí)現(xiàn)方法

    這篇文章主要介紹了Swift 使用 Observe 監(jiān)測(cè)頁面滾動(dòng)的實(shí)現(xiàn)方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 零基礎(chǔ)上手Swift快速入門教程概覽

    零基礎(chǔ)上手Swift快速入門教程概覽

    這篇文章主要介紹了零基礎(chǔ)上手Swift快速入門教程概覽,Swift是由蘋果開發(fā)的新編程語言并且即將開源,需要的朋友可以參考下
    2015-11-11

最新評(píng)論

酒泉市| 泽普县| 威远县| 徐汇区| 伊春市| 东台市| 甘泉县| 介休市| 柏乡县| 蛟河市| 西安市| 屏南县| 科技| 淳化县| 双峰县| 江门市| 阿荣旗| 纳雍县| 东源县| 明星| 德兴市| 屏东县| 兴宁市| 涟水县| 东兴市| 岳西县| 泽普县| 宜兴市| 沈丘县| 柯坪县| 万安县| 于田县| 大兴区| 林周县| 友谊县| 栖霞市| 瑞安市| 于都县| 武胜县| 那曲县| 临高县|