swift方法學習

2021-07-09 13:38:18 字數 2904 閱讀 1101

/**

1.例項方法

2.型別方法

型別方法和oc中的類方法相似

結構體和列舉能夠定義方法是swift與oc/c的主要區別之一。在oc中,類是唯一能定義方法的型別。但在swift中,你不僅能選擇是否要定義乙個類/結構體/列舉,還能靈活的在你建立的型別(類/結構體/列舉)上定義方法。

*///例項方法

/**例項方法的語法和函式完全一致

實力方法要寫在它所屬的型別的前後大括號之間,例項方法能夠隱式訪問它所屬型別的所有的其他例項方法和屬性。例項方法只能被它所屬的類的某個特定例項呼叫。例項方法不能脫離於現存的例項而被呼叫

*/class counter

func incrementby(amount: int)

func reset()

}//用點語法呼叫

let counter = counter();

print

("init:

\(counter.count)");

counter

.increment();

print

("increment:\(counter

.count)");

counter

.incrementby(

10);

print

("incrementby:\(counter

.count)");

counter.

reset

();

print

("reset:

\(counter.count)");

//方法的區域性引數名稱和外部引數名稱

/**方法和函式的區域性名稱和外部名稱的預設行為是不一樣的

swift預設僅給方法的第乙個引數名稱乙個區域性引數名稱,預設同事給第二個和後續的引數名稱區域性引數名稱和外部引數名稱

*///修改方法的外部引數名稱,用_可以不顯示外部名稱

class counter1

}var newcounter = counter1();

newcounter.incrementby(5, time: 2);

print

(newcounter.count);

//self屬性

/**用來區分引數名稱和屬性名稱

*/struct point

}let somepoint = point(x: 4.0, y: 5.0);

ifsomepoint

.istotherightofx(

1.0)

//在例項方法中修改值型別

/**結構體和列舉是值型別,一般情況下,值型別的屬性不能在它的例項方法中被修改

如果確實需要在某個具體的方法中修改結構體或者列舉的屬性,你可以選擇變異(mutating)這個方法,然後方法就可以從方法內部改變屬性;並且它做的任何改變在方法結束時還會保留在原始結構中。方法還可以給它隱含的self屬性賦值乙個全新的例項,這個新例項在方法結束後將替換原來的例項,關鍵字mutating

不能再結構體型別常量上呼叫變異方法,因為常量的屬性不能被改變,即使想改變的是常量的變數屬性也不行

*/struct point2

}var somepoint2 = point2(x: 1.0, y: 1.0);

somepoint2.

movebyx

(2.0

, y:

3.0);

print

("the point is now at \(somepoint

.x),\(somepoint

.y)");

//let somepoint3 = point2(x: 3.0, y: 3.0);

y: 2.0);不能執行

//在變異方法中給self賦值

/**新的變異方法建立了乙個新的結構,呼叫的這個版本和上個版本的最終結果一樣

*/struct point3

}//三態開關例子

enum tristateswitch }}

var ovenlight = tristateswitch.low;

ovenlight.

next

();

//型別方法

/**型別本身呼叫的方法叫做型別方法

宣告類的型別方法,在方法的func關鍵字之前加上關鍵字class

宣告結構體和列舉的型別方法,在方法的func關鍵字之前加上關鍵字static

在swift中,你可以為所有的類、結構體和列舉定義型別方法:每乙個型別方法都被它所支援的型別顯式包含

static用於靜態儲存 */

class someclass2

}someclass2

.sometypemethod();

struct leveltracker

}static

func levelisunlocked(level: int) -> bool

var currenlevel = 1;

mutating

func advancetolevel(level: int) -> bool else}}

class player

init(name: string)

}var player1 = player(name: "xiaoming");

player1

.completedlevel(1);

print

("highest unlocked level is now \(leveltracker

.highestunlockedlevel)");

var player2 = player(name: "nick");

ifplayer2.tracker.

advancetolevel(6

) else

Swift基礎語法學習總結

swift基礎語法學習總結 swift高階語法學習總結 swift語法總結補充 一 1.基礎 1.1 swift還是使用 和 來注釋,並且 允許多行注釋.1.2 swift使用print和println列印,它的傳參是乙個泛型,幾乎所有型別都是可列印的.1.3 swift在語句後面加分號與否都是正確...

NIO ByteBuffer方法學習

建立heapbytebuffer例項,大小為1024位元組 bytebuffer heapbytebuffer bytebuffer.allocate 1024 建立directbytebuffer例項,大小為1024位元組 這裡的bytebuffer是directbytebuffer,不是heap...

改進方法學習

根據人工蜂群演算法的機制我們可以看出,演算法的初始化對演算法的影響較大,初始化的蜜源如果在解空間中分布的不夠均勻,覆蓋解空間的範圍小,將會限制演算法在解空間中的搜尋範圍,導致對解空間中的一些區域搜尋不到,影響演算法的全域性搜尋能力。初始化中若蜜源分布過近會影響演算法的效能。如圖所示 發生如上圖所示的...