【Swift之方法名判斷】|那些人追的干貨
字?jǐn)?shù)2028 閱讀10565 評論11 喜歡42
前言
最近開始學(xué)習(xí)Swift了,感覺在不上手Swift就Out了,這篇blog是我在學(xué)習(xí)Swift中感覺比較實(shí)用,就小結(jié)了下,陸續(xù)還會有更新。
我從事iOS開發(fā)不是很長,但是成長還算快的,說說我為啥能這么短的時間進(jìn)步這么快吧,沒別的,就是喜歡把實(shí)用的東西做成筆記,因?yàn)槲腋杏X自己總結(jié)出來的才算完全掌握,這是我一直以來的學(xué)習(xí)方法。拿去用吧,?。之前筆記都是藏著掖著,現(xiàn)在感覺分享出來,接受大家指導(dǎo),可能會更好,快來噴我吧,求噴?。?!
正文開始咯!
如果有iOS開發(fā)經(jīng)驗(yàn),我們都知道OC方法名在開發(fā)中是比較常用的,比如用perform調(diào)用方法或者運(yùn)行時調(diào)用,都需要用到方法名。
在Swift開發(fā)中,有時也需要用到方法名,比如說使用定時器的時候,有個Selector參數(shù),就需要傳入方法名,這時候如何判斷方法的方法名,就成為開發(fā)必須了解的了。
NSTimer.scheduledTimerWithTimeInterval(ti:NSTimeInterval, target:AnyObject, selector:Selector, userInfo:AnyObject?, repeats:Bool)
什么是方法?
首先我們需要了解一個概念,Swift中什么是方法?其實(shí)可以這樣理解,就是定義在類里面的函數(shù),只不過這個函數(shù)和類產(chǎn)生了某種關(guān)聯(lián)聯(lián)系,必須依賴于類。
如何判斷Swift方法的方法名?
swift方法名和OC方法名命名差不多。
1、如果方法中沒有參數(shù),函數(shù)名就是方法名。
class Person: NSObject {
// 定義一個跑步方法
func run(){
println("跑步")
}
注解: 以上方法名為: run
}
2、如果方法中有參數(shù),外部參數(shù)名和冒號(:)都要作為方法名的一部分。(PS:參數(shù)名又分為內(nèi)部參數(shù)名和外部參數(shù)名,默認(rèn)外部參數(shù)名作為方法名一部分,注意:在Swift方法中,默認(rèn)從第二個參數(shù)開始,內(nèi)部參數(shù)名就是外部參數(shù)名)
一個方法僅僅只有一個參數(shù)并且沒有外部參數(shù)名的情況,第一個參數(shù)名不作為方法名的一部分。因?yàn)槟J(rèn)第一個參數(shù)沒有外部參數(shù)名。
class Person: NSObject {
// 定義一個打游戲方法,只有一個參數(shù)
func playGame(game: String){
println("\(game)")
}
注解: 以上方法名為: playGame:, 因?yàn)間ame是第一個內(nèi)部參數(shù)名,因此不作為方法名的一部分。
}
一個方法僅僅只有一個參數(shù)并且有外部參數(shù)名的情況,系統(tǒng)會自動把外部參數(shù)名的首字母大寫,并且在函數(shù)名和第一個外部參數(shù)名之間拼接一個介詞With,生成一個完整的方法名。
class Person: NSObject {
// 定義一個打游戲方法,只有一個參數(shù)
func playGame(gameName game: String){
println("\(game)")
}
注解: 以上方法名為: playGameWithGameName:, 因?yàn)橄到y(tǒng)首先會自動把外部參數(shù)名gameName的首字母大寫GameName,并且在函數(shù)名playName和第一個外部參數(shù)名GameName之間拼接一個介詞With,生成一個完整的方法名。
}
注意:如果函數(shù)名中已經(jīng)有介詞了,就不會自動拼接介詞With,方法中經(jīng)常使用的介詞有(with,at,on,in,of,by,for),只有沒有介詞的情況,才會默認(rèn)拼接介詞With
class Person: NSObject {
// 定義一個打游戲方法,只有一個參數(shù)
func playGameWith(gameName game: String){
println("打游戲")
}
注解: 以上方法名為: playGameWithGameName:, 并不是playGameWithWithGameName,因?yàn)楹瘮?shù)名playGameWith中已經(jīng)有介詞With了,就不會在自動拼接了,而是直接把外部參數(shù)名gameName首字母大寫,拼接上去就好了。
func playGameOf(gameName game: String){
println("打游戲")
}
注解: 以上方法名為: playGameOfGameName:,理由同上
func playGameAt(gameName game: String){
println("打游戲")
}
注解: 以上方法名為: playGameAtGameName:, ,理由同上
func playGameIn(gameName game: String){
println("打游戲")
}
注解: 以上方法名為: playGameInGameName: ,理由同上
func playGameOn(gameName game: String){
println("打游戲")
}
注解: 以上方法名為: playGameOnGameName: ,理由同上
func playGameBy(gameName game: String){
println("打游戲")
}
注解: 以上方法名為: playGameByGameName:,理由同上
}
一個方法有多個參數(shù),并且沒有外部參數(shù)名的情況。
class Person: NSObject {
// 定義一個和MM,在某個地點(diǎn)聊天方法,有2個參數(shù)
// 以下方法名為: chat:address:, 因?yàn)閙m是第一個參數(shù),不作為方法名的一部分,第二個內(nèi)部參數(shù)名address才作為方法名的一部分,每個參數(shù)對應(yīng)一個冒號.
func chat(mm: String, address: String){
println("我和\(mm),在\(address)聊天")
}
}
一個方法有多個參數(shù),并且有外部參數(shù)名的情況。
class Person: NSObject {
// 定義一個和MM,在某個地點(diǎn)聊天方法
func chat(mm: String, place address: String){
println("我和\(mm),在\(address)聊天")
}
注解: 以上方法名為: chat:place:,因?yàn)閙m沒有外部參數(shù)名就不會作為方法的一部分,address有外部參數(shù),就系統(tǒng)就不會自動生成address外部參數(shù),直接使用定義的外部參數(shù)名place
// 定義一個和MM,在某個地點(diǎn)聊天方法
func chat(xiaoCang mm: String, place address: String){
println("我和\(mm),在\(address)聊天")
}
注解:以上方法名為: chatWithXiaoCang:place:,因?yàn)閙m有外部參數(shù)名就會作為方法的一部分并且拼接一個介詞With,address有外部參數(shù),就系統(tǒng)就不會自動生成address外部參數(shù),直接使用定義的外部參數(shù)名place
// 定義一個和MM,在某個地點(diǎn)聊天方法
func chat(xiaoCang mm: String, _ address: String){
println("我和\(mm),在\(address)聊天")
}
注解: 以上方法名為: chatWithXiaoCang::,因?yàn)閙m有外部參數(shù)名就會作為方法的一部分并且拼接一個介詞With,address沒有外部參數(shù),因?yàn)槁暶鱛(強(qiáng)制符)系統(tǒng)就不會自動生成address外部參數(shù),切記只有外部參數(shù)才會作為方法的一部分。
}
Swift方法名判斷總結(jié):
主要看有沒有外部參數(shù)名,有就會作為方法的一部分。
其實(shí)只要方法命名規(guī)范,是很好判斷的。第一個參數(shù)描述放在函數(shù)名中,默認(rèn)之后的外部參數(shù)名就是內(nèi)部參數(shù)名。
Swift方法其實(shí)跟我們OC方法相似,通常第一個參數(shù)的描述,我們都是聲明在方法描述中。
+(instancetype)personWithDict:(NSDictionary *)dict;
+(instancetype)personWithName:(NSString *)name age:(int)age
因此swift方法命名,個人建議最好在函數(shù)名中聲明第一個參數(shù)的描述。如下:
func playGameWithName:(name: String){},這個方法名為playGameWithName:,這個就是我們比較熟悉的OC命名方式了,就是因?yàn)檫@個Swift才不會給第一個參數(shù)生成外部參數(shù)名。