Swift5 簡單使用

Swift5類型轉(zhuǎn)換

swift中值永遠(yuǎn)不會(huì)隱式轉(zhuǎn)換為另一種類型碌上。如果需要將值轉(zhuǎn)換為其他類型叠荠,請顯式創(chuàng)建所需類型的實(shí)例.

let value = 12
let str = "age"
let res = str + String(value)
// 錯(cuò)誤寫法 let res = str + value 這種是沒有類型推斷的,甚至于在編寫時(shí)就會(huì)報(bào)錯(cuò)  cannot be applied to operands of type 'String' and 'Int'
print(res)
// 結(jié)果: age12

Swift5字符串快速拼接

  • 拼接變量或者常量使用: \()
let apples = 5
let appleSummary = "I have \(apples) apples."
print(appleSummary)
// 結(jié)果: I have 5 apples.

\() 也可以用于浮點(diǎn)計(jì)算磅摹,如\(A+B)

  • 字符串折行

使用: """

let value = """
        Just like "The Shawshank Redemption",
        "I guess it comes down to a simple choice: Get busy living, or get busy dying. Busy living, or busy dying."
 """
 print(value)    

Swift5 if 條件判斷

if語句中條件必須是布爾值或者表達(dá)式,而不是與零或者空的隱式比較。

在OBJC 中渣淤,你可以這樣寫:
NSString *str;
 if (str) {
     NSLog(str);
}

在swift 中則不行,你可以這樣寫
var str: String
str = "aaa"
str = ""
...// 其他操作
if str.count > 0 {
    print(str);
}

Swift5 可選值處理

處理方式很多吉嫩,如if 砂代,switch ,下面介紹一種ios中沒有的 ??,

var str: String? = "aaa"
str = nil
var defaultValue = "bbb"
print(str ?? defaultValue)
其實(shí)它就是個(gè)三目率挣,寫法改變了而已

Swift5至少執(zhí)行一次的repeat while(do-while in objc) 和 while

var a = 2
repeat {
    a = 2 * a
    print(a)
} while a < 2
// 結(jié)果: 4   
     
var b = 2
while b < 2 {
    b = 2 * b
    print(b)
}
// 結(jié)果:

Swift5特別方便的元組使用

在objc中方法返回多個(gè)參數(shù)時(shí)刻伊,要么數(shù)組,要么字典,必須得去構(gòu)建個(gè)參數(shù)捶箱,swif使用元組t寫法上則方便很多

override func viewDidLoad() {
     super.viewDidLoad()

     let result = filter(scores: [1,5,3,7,90,45])  
     print(result)
     //結(jié)果:  (min: 1, max: 90, sum: 151)
        
}
    
func filter(scores: [Int]) -> (min: Int, max: Int, sum: Int) {
     var min = scores[0]
     var max = scores[0]
     var sum = 0

     for score in scores {
         if score > max {
             max = score
         } else if score < min {
             min = score
         }
         sum += score
     }

     return (min, max, sum)
 }

Swift5方法作為參數(shù)智什,方法作為傳參,方法嵌套

這也是OC里面沒有的丁屎,以下方法實(shí)現(xiàn)功能:求 平均年齡:最高學(xué)分荠锭,僅做演示功能需要,實(shí)際肯定不必這樣寫

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 年齡數(shù)組
        let a:[Float] = [14, 15, 16, 14]
        // 學(xué)分?jǐn)?shù)組
        let b:[Float] = [80, 90, 96, 88]
        let result = setupParam(infoA: a, funcB: dealAge)
        print(result(b))
        // 結(jié)果: (averageAge: 14.75, averageCredit: 96.0)
        
    }
    
    // 求平均年齡
    func dealAge(ages: [Float]) -> Float {
        var total:Float = 0.0
        for age in ages {
            total += age
        }
        if ages.count > 0 {
            return total/Float(ages.count)
        }
        return 0
    }
    
    // 方法作為參數(shù)晨川,方法作為返回值 求 平均年齡:最高學(xué)分
    func setupParam(infoA: [Float], funcB: ([Float]) -> Float) -> (([Float]) ->(averageAge: Float, averageCredit: Float)) {
        // 平均年齡
        let age = funcB(infoA)
        // 方法嵌套
        func avrage(numbers:[Float]) -> (avAge: Float, avCredit:Float) {
            let best = numbers.max() ?? 0
            return (age, best)
        }
        return avrage
    }

Swift5枚舉

Swift會(huì)分配從零開始的原始值证九,并每次遞增一,但是您可以通過顯式指定值來更改此行為

    enum Poker: Int {
        case ace = 1
        case two, three, four, five, six, seven, eight, nine, ten
        case eleven, twelve, thirteen
        func translate() -> String {
            switch self {
            case .ace:
                return "A"
            case .eleven:
                return "J"
            case .twelve:
                return "Q"
            case .thirteen:
                return "K"
            default:
                return String(self.rawValue)
            }
        }
    }

let value = Poker.ace
print(value.translate())
// 結(jié)果: A

Swift5協(xié)議

使用protocol申報(bào)的協(xié)議共虑,類愧怜,枚舉和結(jié)構(gòu)都可以采用協(xié)議。

protocol MyProtocol {
    var param: String { get }
    mutating func adjust()
}

class classB: MyProtocol {
    var param: String = "MyProtocol"
    func adjust() {
        param += " description"
        print(param)
    }
}

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let a = classB()
        a.adjust()
        // 結(jié)果:MyProtocol description
    }

Swift5類擴(kuò)展

用于extension向現(xiàn)有類型添加功能妈拌,例如新方法和計(jì)算屬性拥坛。

extension ViewController {
    var viewDes: String {
        return "ViewController des"
    }
    func printViewDes() -> String {
        return "extentions method \(viewDes)"
    }
}

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let des =  printViewDes()
        print(self.viewDes, des)
        // 結(jié)果 ViewController des extentions method ViewController des
        
    }

}

Swift5錯(cuò)誤處理

先定義一個(gè)代表錯(cuò)誤的枚舉

enum MyError: Error {
    case lengthError, tooMuchError, tooLittleError
}
    override func viewDidLoad() {
        super.viewDidLoad()
        let str = "sdsadasdassssssss"
        do {
            let printerResponse = try checkContent(content: str)
            print(printerResponse)
        } catch {
            print(error)
        }
        // 結(jié)果:tooMuchError
    }
    
    func checkContent(content: String) throws -> String {
        if content.count > 10 {
            throw MyError.tooMuchError
        } else if content.count < 5 &&  content.count > 0 {
            throw MyError.tooLittleError
        } else if content.count == 0 {
            throw MyError.lengthError
        } else {
            print("valid");
        }
        return "checkContent done"
    }

Swift5 字符串(String)操作
Swift5 字符(Character)操作
Swift5 數(shù)組(Array)操作
Swift5 字典(Dictionary)操作
Swift5 集合(Set)操作
Swift5 簡單使用
Swift OC動(dòng)態(tài)調(diào)試工具 InjectionIII 使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者尘分。
  • 序言:七十年代末猜惋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子培愁,更是在濱河造成了極大的恐慌著摔,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件定续,死亡現(xiàn)場離奇詭異梨撞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)香罐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門卧波,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人庇茫,你說我怎么就攤上這事港粱。” “怎么了旦签?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵查坪,是天一觀的道長。 經(jīng)常有香客問我宁炫,道長偿曙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任羔巢,我火速辦了婚禮望忆,結(jié)果婚禮上罩阵,老公的妹妹穿的比我還像新娘。我一直安慰自己启摄,他們只是感情好稿壁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著歉备,像睡著了一般傅是。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蕾羊,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天喧笔,我揣著相機(jī)與錄音,去河邊找鬼龟再。 笑死书闸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吸申。 我是一名探鬼主播梗劫,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼享甸,長吁一口氣:“原來是場噩夢啊……” “哼截碴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蛉威,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤日丹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蚯嫌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哲虾,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年择示,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了束凑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡栅盲,死狀恐怖汪诉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谈秫,我是刑警寧澤扒寄,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站拟烫,受9級特大地震影響该编,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜硕淑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一课竣、第九天 我趴在偏房一處隱蔽的房頂上張望嘉赎。 院中可真熱鬧,春花似錦稠氮、人聲如沸曹阔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赃份。三九已至,卻和暖如春奢米,著一層夾襖步出監(jiān)牢的瞬間抓韩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工鬓长, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谒拴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓涉波,卻偏偏與公主長得像英上,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子啤覆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容