標籤:
今天研究了一下swift語言,隨便找了小demo,一點研究swift文法精髓,整體下來感覺很舒服,就是瞭解文法廢了些時間,我感覺swift語言初期很難瞭解,不過理解過了之後,你才能真正的體會到這個語言的方便之處,沒有過多的累贅,這個語言還真的是門不錯的語言,廢話不多說,記錄下自己的理解筆記,如果有什麼不對的大家多多指教.......
這個是UIViewController實現代碼
//匯入架構import UIKit//檔案的入口,也就是主要編輯程式的地方class ViewController: UIViewController { override func viewDidLoad() { //調用父累載入方法 super.viewDidLoad() //設定輪播圖的frame,let在swift裡面是標示常量,這個常量和OC的常量不一樣,這裡標示的是不變的量,let可以儲存物件類型 let frame = CGRectMake(0, 20, view.bounds.width, view.bounds.width*0.6) //這個let就是不變數組 let imageView = ["2.jpg","3.jpg","4.jpg"] //在swift裡面建立view很簡單,直接調用view方法傳遞參數即可 let loopView = AdLoopView(frame: frame, images: imageView, autoPlay: true, delay: 3, isFromNet: false) //添加代理沒有發生變化 loopView.delegate = self //添加視圖方法,基本和OC沒有變化 view.addSubview(loopView) /* 從這些裡面我們就可以看出swift的語言保持了OC的文法命名規則,對於OC的開發攻城獅是個福音,調用方法很簡單 方法名(有參數傳參即可) */ }}//這個是此controller遵循代理方法 關鍵字在extension ,extension的作用是給此檔案添加擴充,此擴充即使OC中的擴充extension ViewController : AdLoopViewDelegate{ //方法命名規則,這個是代理方法,代理方法的命名規則和方式和OC相差不多 func adLoopView(adLoopView: AdLoopView, IconClick index: NSInteger) { print(index) }}
view實現的檔案
private var currentImages : NSMutableArray?{ //NAMutableArray的get方法 get{ currentImgs.removeAllObjects() //let常量 !表示images數組裡面肯定有值 let count = self.images!.count var i = NSInteger (self.currentPage! + count - 1 )%count currentImgs.addObject(self.images![i]) currentImgs.addObject(self.images![self.currentPage!]) i = NSInteger(self.currentPage!+1) % count currentImgs.addObject(self.images![i]) //傳回值 return currentImgs } } //private 修飾此變數只能此檔案使用 var是表示變數值可以改變 ? 表示此變數可以為空白值或有值 private var images:NSArray? //BOOL 類型發生改變不在是YES/NO 而是 true/false private var autoPlay :Bool? private var isFromNet :Bool? private var delay : NSTimeInterval? //建立代理變數 var delegate : 協議名稱? var delegate : AdLoopViewDelegate? //override 標示含父類init方法首碼 override init(frame: CGRect) { super.init(frame: frame) }
required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } //convenience修飾本類的init函數 convenience init(frame:CGRect, images : NSArray, autoPlay:Bool ,delay:NSTimeInterval , isFromNet:Bool){ self.init(frame :frame) self.images = images self.autoPlay = autoPlay self.isFromNet = isFromNet self.delay = delay self.currentPage = 0 createImageScrollView() createPageView() //if判斷和CO的文法格式沒有變化,相對於OC還是簡化了,在swift裡面沒有延續OC 0假 1真 if images.count < 2 { self.autoPlay = false pageControl?.hidden = true } if self.autoPlay == true { startAutoPlay() } }
//此for條件0..<3 意思是0到3其中包括0 1 2 不包括3 for index in 0..<3 { let imageView = UIImageView(frame:CGRectMake(self.bounds.width*CGFloat(index), 0, self.bounds.width, self.bounds.height)) imageView.userInteractionEnabled = true imageView.addGestureRecognizer(UITapGestureRecognizer(target:self,action: #selector(AdLoopView.imageViewClick))) if self.isFromNet == true { }else{ imageView.image = UIImage(named: self.currentImages![index] as! String); } imageScrollView?.addSubview(imageView) }
//as! 表示軟弱型 as?是強轉型 imageView.image = UIImage(named: self.currentImages![i] as! String);
//擴充 履行UIScrollViewDelegate方法extension AdLoopView :UIScrollViewDelegate{ //UIScrollView 代理方法 func scrollViewDidEndDecelerating(scrollView: UIScrollView) { scrollView.setContentOffset(CGPointMake(self.frame.width, 0), animated: true) } //UIScrollView 代理方法 func scrollViewDidScroll(scrollView: UIScrollView) { let x = scrollView.contentOffset.x let width = self.frame.width if x >= 2 * width { currentPage = (currentPage!+1) % self.images!.count pageControl!.currentPage = currentPage! refreshImages() } if x <= 0 { currentPage = (currentPage!+self.images!.count-1) % self.images!.count pageControl!.currentPage = currentPage! refreshImages() } } }
//自訂代理方法 首碼使用@objc protocol 代理名稱:和遵循的協議{代理方法}@objc protocol AdLoopViewDelegate:NSObjectProtocol { func adLoopView(adLoopView:AdLoopView ,IconClick index:NSInteger) }
今天就到這裡吧...改天再學學
swift 初步接觸 基本文法 方法命名 (一)