swift 初步接触 基本语法 方法命名 !和?区别 as!和as?区别 let和var区别 extension override private (一)

今天研究了一下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)
    
}

今天就到这里吧...改天再学学

posted @ 2016-04-11 20:06  侃不晴的天空  阅读(1193)  评论(0编辑  收藏  举报