typealias
是用來為已經存在
的型別重新定義
名字的,通過命名
,可以使**
變得更加清晰
。使用的語法
也很簡單
,使用typealias
關鍵字像使用普通的賦值語句
一樣,可以將某個已經存在
的型別賦值為新名字
。
比如在計算二維平面上的距離和位置的時候,我們一般使用double來表示距離,用cgpoint來表示位置:
func
distancebetweenpoint
(point:
cgpoint
, topoint:
cgpoint)-
>
double
let origin =
cgpoint
(x:0
, y:0)
let point =
cgpoint
.init
(x:1
, y:1)
letdistance
=distancebetweenpoint
(point: origin, topoint: point)
print
(distance
)// 1.4142135623730951
雖然在數學上和最後的程式執行上都沒什麼問題,但是閱讀和維護的時候總是覺得有**不對。因為我們沒有將數學抽象和實際問題結合起來,使得在閱讀**時我們還需要在大腦中進行一次額外的轉換:cgpoint
代表乙個點
,而這個點就是在定義的座標系
裡的位置;double
是乙個數字
,它代表兩個點之間的距離。
typealias
location
=cgpoint
typealias
distance
=double
func
distancebetweenpoint
(point:
location
, topoint:
location)-
>
distance
let origin =
location
(x:0
, y:0)
let point =
location
.init
(x:1
, y:1)
letdistance
:distance
=distancebetweenpoint
(point: origin, topoint: point)
print
(distance
)
同樣的**,在typealias
的幫助下,讀起來
就輕鬆
多了。可能只憑這個簡單例子不會給人特別多的體會,但是當遇到複雜
的實際問題時,你不再關心並去對映
自己**裡那些成堆
的int
或者string
這些基本型別到底代表
的是什麼
,會省下不少」腦細胞「
。
對於普通型別
並沒有什麼難點,但是在涉及泛型
時,情況就不太一樣
。首先,typealias
是單一的
,也就是說你必須
指定將某個特定的型別
通過typealias賦值
為新名字
,而不能
將整個泛型
進行重新命名
。請看下面的命名方式:
class
person
typealias
worker
=person
// 可以通過編譯
typealias
worker
=person
// cannot find type 't' in scope
typealias
worker
=person
// invalid redeclaration of 'worker'
一旦泛型型別的確定性得到保證後,我們就可以重新命名了:
class
person
typealias
workerid
=string
typealias
worker
=person
<
workerid
>
另乙個值得一提的是swift
中是沒有泛型
介面的,但是使用associatedtype
,我們可以在介面裡定義乙個必須實現
的別名
,這在一定範圍內也算一種折中方案
。比如在expressiblebyunicodescalarliteral
介面中,swift就用到了這個技巧,來為介面確定乙個使用的類似泛型
的特性:
public
protocol
expressiblebyunicodescalarliteral
在實現這些介面時,我們不僅需要實現指定的方法,還要實現
對應的typealias
,這其實是一種對於介面適用範圍
的抽象
和約束
。 和 區別和聯絡, 和 區別和聯絡
和 區別和聯絡,和 區別和聯絡,實際專案中,什麼情況用哪種?首先,和 的聯絡 共同點 和 都可以用作 邏輯與 運算子,都是雙目運算子。具體要看使用時的具體條件來決定。無論使用哪種運算子,對最終的運算結果都沒有影響。情況1 當上述的運算元是boolean型別變數時,和 都可以用作邏輯與運算子。情況2 ...
rpx和樣式和class和flex
5 style 靜態的樣式統一寫到 class 中。style 接收動態的樣式,在執行時會進行解析,請盡量避免將靜態的樣式寫進 style 中,以免影響渲染速度。例 6 class 用於指定樣式規則,其屬性值是樣式規則中類選擇器名 樣式類名 的集合,樣式類名不需要帶上.樣式類名之間用空格分隔。關於f...
if和switch和for語句
if和switch很像。具體什麼場景下,應用那個語句呢?如果判斷的具體數值不多,而是符合byte,short,int,char,字串。這五種型別。雖然兩個語句都可以使用,建議使用switch語句,因為效率稍高。其他情況,對區間判斷,對結果為boolean型別判斷,使用if,if的使用範圍更廣。whi...