swift筆記
基礎知識
進制
0x代表16進制
0o代表8進制
0b代表2進制er
dict
dict: listdata
listdata.count 總數
for i in listdata{
print i.key
piint i.value
}
dict to array Array(dict.allkeys)
Array會打亂dict順序
拆包
可空類型 optional
如果一個值的聲明不是可空類型,說明他一定有值,保證了安全性
!申明爲隱式可控類型
var a:String?
隱式轉換類型 如果沒有值就會導致運行錯誤
而 可空類型不需要
as?爲可選類型 進行轉換 當轉換失敗時,值爲nil
可以不必初始化,也就是說這個變量可能爲nil
而且類型是String?類型
在輸出值是用!來解包
String
插入
var var_url=url
let off5=url.index(of: “:”)
var_url.insert(“s”, at: off5!)
輸出格式化
let format = String(format:”%.2f”,b)
對數字進行formate
let times=String.init(format: “%02d:%02d”,mins,second)
向項目裏面添加別的庫函數
2 種辦法
cathage:
創建file 然後update
cocoaPods
pod search Snapkit
找出所有的包
然後vim profile
將內容加進去
然後pod install
xcodebuild -showsdks 查看ios版本
cocoa
storyboard
建立storyboard 然後將空間拖入需要調用的swift中
@IBOutlet weak var
然後如果要對按鈕綁定事件, @IBAction func
在storyboard中設置 table 的數據源右鍵拖table 到最上邊的小黃點,然後選擇datasource
可以設置 多個storyboard連接,管理不同的module
設置searchDisplaycontroller
防止生成多餘的table_cell
tableview.tableFooterView = UIView()
UItableview
如何設置響應,應該在設置delegate?
在extention 中添加 UITableViewDelegate 如果無效的話
將一個screen變成storyboard
針對第一個Demo,進行拆分,選中Contacts以及nav(高亮顯示),然後點擊Xcode的菜單欄,選擇”Editor->Refactor to Storyboard”。
設置動作變化動畫
animationWithDuration 動畫持續時間
animation 動畫閉包,在這個閉包中你可以改變UIView
的各種動畫屬性。
組件位置:
改變組件位置
通過設置center的x和y來改變
設置組件位置:
myslider=UISlider(frame: CGRect(x:20, y:380, width: 300, height: 20))
屏幕大小:
375
667
得到屏幕寬度:
let fullsize=UIScreen.main.bounds.size
let width=fullsize.width
let height=fullsize.height
print(width)
print(height)
imageview
建立一個imageview 在目錄下建立個image文件夾,放入圖片
let imgArr=[UIImage(named: “1_13.jpg”)!,
UIImage(named: “1_31.jpg”)!,
UIImage(named: “imag.jpg”)!,
]
可以直接使用Assets.xcassets中的文件
可以設置輪播
圖片旋轉
- let rad=20/180*Float(Double.pi)
myImageView.transform=CGAffineTransform(rotationAngle: CGFloat(rad))
連續旋轉
let rad=20/180*Float(Double.pi)
myImageView.transform=myImageView.transform.rotated(by: CGFloat(rad))按照週期不停旋轉
let rotationAnim = CABasicAnimation(keyPath: "transform.rotation.z")
// // 2.設置動畫的屬性
// rotationAnim.fromValue = 0
// rotationAnim.toValue = M_PI * 2
// rotationAnim.repeatCount = MAXFLOAT
// rotationAnim.duration = 1
// // 這個屬性很重要 如果不設置當頁面運行到後臺再次進入該頁面的時候 動畫會停止
// rotationAnim.isRemovedOnCompletion = false
// // 3.將動畫添加到layer中
// myImageView.layer.add(rotationAnim, forKey: nil)
UIImageview的初始圖片
myImageView.image=UIImage( named: “angry/angry_00.jpg”)
animationDuration : 循環走一遍花費的時間
animationRepeatCount: 重複的次數
上下平移
通過center來上下平移
如果通過origin.x來平移
圖形在旋轉是會發生變化
放大和縮小
通過bounds.size.height 和bounds.size。width來放大和縮小 不然旋轉時會改變大小
設置cgrect 的界面爲全屏
button
使用tag 向button傳值
button1.addTarget(self, action: #selector(ViewController.play(sender:)), for: .touchUpInside)
@objc func play(sender:UIButton) {
// tag==0 start
if sender.tag==0{
myImageView.startAnimating()
}
}
slider
myslider=UISlider(frame: CGRect(x:20, y:380, width: 300, height: 20))
myslider.addTarget(self, action: #selector(valuechanged(_sender:)), for:UIControlEvents.valueChanged)
myslider.minimumValue=0
myslider.maximumValue=180
webview
webView=WKWebView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height))
let url=URL(string: “https://www.baidu.com“)
let request=URLRequest(url: url!)
webView.load(request)
加載html
func startLoad() {
let url = URL(string: "https://www.example.com/")!
let task = URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
self.handleClientError(error)
return
}
guard let httpResponse = response as? HTTPURLResponse,
(200...299).contains(httpResponse.statusCode) else {
self.handleServerError(response)
return
}
if let mimeType = httpResponse.mimeType, mimeType == "text/html",
let data = data,
let string = String(data: data, encoding: .utf8) {
DispatchQueue.main.async {
self.webView.loadHTMLString(string, baseURL: url)
}
}
}
task.resume()
}
操縱網頁
goBack()
goForward()
reload()
stopLoading()
在swift中調用js方法
在js中 用 window.webkit.messageHandlers.Test.postMessage(text) 將信息傳遞給swift
- WKScriptMessageHandler 將網頁中的js資料傳遞過來
- wkuiDelegate 將alter窗口攔截下來
在swift中用
讀取文件
- 讀取圖片
需要將圖片文件夾添加在沙盒中
然後路徑讀取 - 讀取plist
從最原始的路徑開始讀
let home=NSHomeDirectory() as NSString
let arrayPath=home.strings(byAppendingPaths: [“tom.list”]) 從main沙盒路徑讀取
undle 的全局路徑
/Users/fanjialiang2401/Library/Developer/CoreSimulator/Devices/F11FF9DC-A17A-4400-B7B7-BA8E33B4AE6B/data/Containers/Bundle/Application/C4CC4002-3574-48D7-ACBE-DB6A486510BB/Tom.app從當前目錄下讀取
let budledir=Bundle.main.path(forResource: “tom”, ofType: “plist”)
var listdata=NSDictionary(contentsOfFile: budledir!)
bug整理
- 當storyboard和lable綁定時,不能改名字,否則 會報錯:setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key feel_like.’
湯姆貓的實現思路
加載plist,從plist中讀取dict
然後給每個button設置label,然後從 dict[label]中讀取圖片的個數和文件的路徑
然後將圖片加載到imageview中,來播放,播放的時間用animationDuration來設置
在imageview播放期間,如果點擊了其他的按鈕,則返回,避免破壞播放
最終的項目
- 圖片瀏覽器
功能要求:
根據拖動滑動條來改變圖片的瀏覽順序
根據圖片的改變動態改變圖片的文字描述
增加一個滑動條實現圖片的放大和縮小
實現夜間模式和白天模式的切換
天氣預報
功能要求:
全國一些城市的天氣預報顯示
通過搜索輸入框來進行天氣查詢,可支持全球3萬多城市的天氣查詢
支持拼音查詢,漢字查詢
支持詳細內容查詢,點擊cell跳轉進入詳細內容的顯示,有風速,風向,體感溫度,實際溫度,溼度,氣壓等詳細數據的顯示
個人創新項目,私人fm
實現音樂播放器功能:歌曲名,演唱者,圖片顯示,切換歌曲,拖動進度條功能
採用豆瓣FM接口,可以向用戶隨機推薦歌曲。如果不喜歡即可切換下一首
圖片排列
根據選擇的行數不同來排列不同的圖片
實現視頻上的要求
瀏覽器,訪問蘋果官網的首頁