日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

swift5.x基础知识入门

發(fā)布時間:2023/12/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 swift5.x基础知识入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

swift5.x基礎(chǔ)知識入門

源碼在我的主頁下,歡迎下載,我非常喜歡swift和oc的語法,兩者相似,我堅信天下沒有學(xué)不會的技術(shù)。

  • 基本介紹
    ///這里只介紹一些初學(xué)swift的基本概念,需要提前了解的東西
    /*
    1.swift語法和OC不一樣,OC每一行代碼都是以分號";"結(jié)尾的,但是swift結(jié)尾是沒有結(jié)尾標(biāo)識符的
    2.OC只要語法正確就可以,不用整理格式,但是swift非常注重格式,比如 a = 3 ,在=的左右必須都有一個空格,或同時有多個,當(dāng)=左右空格個數(shù)不一樣時,比如 b= 2 這樣會報錯
    3.OC調(diào)用方式的時候是,是類名或?qū)ο竺?#43;空格+方法名,然后用中括號括起來:[Person saveCall];
    swift是類名或?qū)ο竺?#43;.+方法名即可: person.saveCall ,類似與OC的點語法
    4.swift語法整體兼容OC,可以通過橋接和OC無縫對接
    5.swift語法風(fēng)格整體類似于Java
    6.新建的swift類,只有一個.swift文件,沒有.h文件和.m文件
    7.swift可以使用cocoapods,方法同OC一樣
    8.不需要導(dǎo)入頭文件,可以直接引用其他類里面的方法或?qū)傩?br /> 9.swift沒有宏這個概念
    10.swift沒有類擴展這個概念
    11.沒有main.m文件 @UIApplicationMain是程序入口標(biāo)識
    12.class 標(biāo)示聲明類 {} 用來標(biāo)識類的范圍
    13.構(gòu)造函數(shù) [xxx alloc] initWithXXX] ==> xxx(XXX:) ;[alloc init] => ()
    14.UIButtonTypeContactAdd => 枚舉類型.枚舉值(簡寫 .枚舉值)
    15.在當(dāng)前類中訪問屬性或者方法的時候 可以省略 self. 推薦不寫, 后面的閉包中必須添加self.
    16.按鈕的監(jiān)聽事件 使用 #selector
// // ViewController.swift // swift基礎(chǔ)知識20210313 // // Created by 魯軍 on 2021/3/13. //import UIKit class ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()let area1 = getArea(a: 2, b: 4)let area2 = getArea2(width: 3, height: 4)print(area1,area2)numOne()fiveDemo()}// MARK: - 常量和變量 Firstfunc firstDemo1() {let a = 10// a = 2 ----> 會報錯 let定義的變量不能改變,不能進行賦值print(a) // ---> 打印使用print語法,不適用nslogvar b = 20b = 30 //不會報錯,var定義的變量是可以被修改的let c: Int = 10let d: CGFloat = 20.3let e: Float = 3.1415/*swift是一個強類型的語言option + click 是swift開發(fā)的熱鍵 沒有之一Int 是swift中整數(shù)的默認(rèn)類型(NSIbteger)小數(shù)默認(rèn)類型是doublelet d: CGFloat = 20.3 這屬于手動指定類型*/// let res1 = c + d --> 會報錯let res2 = c + Int(d)print(res2)/*不同類型之間的運算swift中類型不一樣的時候不能操作,沒有銀行形式的轉(zhuǎn)換 需要coder手動轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換類型: 通過類型調(diào)用構(gòu)造函數(shù) 傳遞參數(shù)轉(zhuǎn)換 ,或as語法*/}/*----------------------------------------------------------------------------*/// MARK: - swift與OC的不同func scondDemo() {let myView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))// myView.backgroundColor = UIColor.yellow// myView.backgroundColor = #colorLiteral(red: 1, green: 0.3233583075, blue: 0.3979080506, alpha: 1)myView.backgroundColor = UIColor.green//color Literal屬性let btn = UIButton(type: UIButton.ButtonType.custom)//let btn1 = UIButton(type: .contactAdd) 可以簡寫 直接.+枚舉myView.addSubview(btn)//添加到根視圖view.addSubview(myView)//給按鈕添加點擊事件btn.addTarget(self, action: #selector(btnDidClick), for: .touchUpInside)}@objc func btnDidClick() {print("我被點擊了")}/*----------------------------------------------------------------------------*/// MARK: - 可選類型func thirdDemo() {//可選類型有可能有值,也有可能為nil//let聲明可選類型是沒有意義的//必選類型一定有值var a:Int? = 10a = nil//這就是一個可選類型//不能夠?qū)蛇x類型做強制解包var b: Int? = 15let c = (b ?? 0) + 20var d = 10let res = 20 + dprint(res,(b ?? 0),c,d)//可選類型不能夠直接計算/*你是否需要使用'?'或者'!'進行解包-- '!'強制解包 一定要獲取一個值 不能夠為nil-- '?'可選解包 后面具體說-- 如果可選類型要進行計算的時候,系統(tǒng)會報錯,需要程序員手動處理可選類型-- '!'強制解包有風(fēng)險,需要謹(jǐn)慎使用,程序員需要對'!'負(fù)責(zé) 如果為nil 程序會崩潰-- 一定要考慮是否安全 一定有值 防患于未然-- '??' 合并空選項 必須提高 ?? 的優(yōu)先級*/}/*----------------------------------------------------------------------------*/// MARK: - 分支結(jié)構(gòu)func fourDemo() {//1.分支結(jié)構(gòu) if語句/*1. 條件語句沒有 () ,可以寫 但不推薦寫2. 分支結(jié)構(gòu)必須有 {}3. 沒有 非零即真的概念,只有 true 和 false*/let a = 13if a < 14 {print("小,很小,非常小")} else {print("大,很大,非常大")}//2. if let//模擬網(wǎng)絡(luò)請求let urlString = "http://www.baidu.com"let url = URL(string: urlString)if url != nil {let req1 = URLRequest(url: url!)}if let url2 = URL(string: urlString) {let req2 = URLRequest(url: url2)}//3. guard(守衛(wèi)) let else/*作用與if let 相反guard let 能夠減少一層分支嵌套*/let urlStr = "http://www.baidu.com"guard var url1 = URL(string: urlStr) else {//不希望guard 能夠被穿透//如果url1 為nil 就進入else 分支 會直接returnreturn}let req = URLRequest(url: url1)//4.guard 多個可選值的判斷var age1: Int? = 15var age2: Int? = 20if age1 != nil && age2 == nil {}guard let ag1 = age1,let ag2 = age2 else {print("嘎嘎嘎")return;}//5.switch/*1.不需要寫break2.每個匹配項中至少有一段代碼可以執(zhí)行3.可以判斷任意類型4.一次可以匹配多個值5.在匹配項中可以聲明臨時變量,而且不需要加 {} 限制作用域*/let x = "20000"switch x {case "20000","30000":print("架構(gòu)師")case "18000":print("高級開發(fā)工程師")case "12000":print("中級開發(fā)工程師")case "6000":print("菜逼")default:print("逗比")}}/*----------------------------------------------------------------------------*/// MARK: - 循環(huán)func fiveDemo() {let range = 0...10for i in range {print(i)}print("----------------------")//遍歷0到10,不加包括10, 0..<10 表示不包括10for i in 0...10 {print(i)}//對沒有使用的變量或者常量在編譯的時候可以忽略for _ in 0..<10 {print("😑")}let _ = 11}/*----------------------------------------------------------------------------*/// MARK: - 字符串func sixDemo() {//字符串的本質(zhì)是結(jié)構(gòu)體let str: String = "長得帥可以撩妹,長丑是騷擾"//String和NSString可以相互轉(zhuǎn)換let NSstr = str as NSStringprint(NSstr)//字符串的基本屬性let str1 = "長得帥可以撩妹,長丑是騷擾"//長度let len = str1.lengthOfBytes(using: .utf8)print(len)//字符集合let length = str1.countprint(length)//遍歷字符串for character in str1 {print(character)}//使用 + 來拼接字符串let str2 = "別低頭,綠帽會掉"let str3 = "別哭泣,老王會笑"let res1 = str2 + str3print(res1)let name = "王哥"let age = 13// : \() 轉(zhuǎn)義符號 轉(zhuǎn)義字符串let res2 = name + String(age)let res3 = name + "\(age)"let res4 = "\(name)\(age)"print(res2,res3,res4)//格式化字符串let z = 9let x = 1let h = 20// 09:01:20//可以接受可變參數(shù)let res5 = String(format: "%02d:%02d:%02d", z,x,h)print(res5)//字符串的截取let str4 = "我喜歡手指在鍵盤上飛舞的感覺"let start = str4.index(str4.startIndex, offsetBy: 3)let sub1 = str4.suffix(3)let sub2 = str4.suffix(from: start)print(sub1,sub2)}/*----------------------------------------------------------------------------*/// MARK: - 集合:數(shù)組,字典func sevenDemo() {//1.數(shù)組的聲明 和 空數(shù)組的實例化//不推薦在數(shù)組中放不同的元素let array: [Any] = ["阿大,阿二,阿三",18]print(array)//實例化空數(shù)組//常量類型的空數(shù)組沒有意義var emptyArray = [String]()//2.增刪改查//var表示可變數(shù)組var arr = ["大哥","二哥","三哥","四哥"]//增arr.append("老司機")//改arr[0] = "姐姐"//刪arr.remove(at: 1)//查for str in arr {print(str)}//倒序遍歷for str in arr.reversed() {print(str)}//同時遍歷角標(biāo)和對應(yīng)的值for (index,value) in arr.enumerated().reversed() {print(index)print(value)}//3.數(shù)組的合并let array1: [Any] = ["老張","老李",19]let array2: [Any] = ["大哥","大姐",23]let array3 = array1 + array2print(array3)//4.字典/*同樣是使用[] 來聲明[String : Any] 是最常見的字典格式*/let dict: [String : Any] = ["name" : "玄哥","age" : "21"]//聲明空字典var emptyDict = [String : Any]()var dic: [String : Any] = ["name" : "玄哥","age" : "21"]//增dic["love"] = "鏡子"//改dic["love"] = "小鏡子"//刪// dic.removeAll()dic.removeValue(forKey: "age")//遍歷for (key,value) in dic {print(key,value)}}/*----------------------------------------------------------------------------*/// MARK: - 函數(shù)func getArea(a: Int,b: Int) -> Int {return a * b}//width 表示外部參數(shù) a 和 b 標(biāo)識函數(shù)的內(nèi)部參數(shù)只能夠在內(nèi)部使用//能夠讓函數(shù)的可讀性更強,同時也能夠讓函數(shù)在內(nèi)部使用參數(shù)更加簡單func getArea2(width a:Int,height b: Int) -> Int {return a * b}//函數(shù)的內(nèi)部函數(shù)func numOne() {func numTwo(a: Int,b: Int) {print(a * b)}//內(nèi)部調(diào)用numTwo(a: 2, b: 4)}/*----------------------------------------------------------------------------*/ }

總結(jié)

以上是生活随笔為你收集整理的swift5.x基础知识入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。