swift学习

/

//  ViewController.swift

//  SwiftTest

//

//  Created by Zhengkui Wang  on 16/2/15.

//  Copyright © 2016 Zhengkui Wang . All rights reserved.

//


/*

            ******* 基本语法 ********

swift语法简单,有c语言功底的一看就知道怎么回事,慢慢习惯就好。

官网上说,swift兼容ocjs,而oc兼容cc++,所以swift兼容occc++,js语言,swift语法简单,容易让人接受,功能强大,还很安全,真是一个好东西。

swift有属性有存储属性和计算属性,其实存储属性就是结构体中的字段或者某一个类中的一个属性。计算属性就是我们oc中的setget方法的属性咯。

swift不用倒入头文件,属性和方法分为private(私有的),internal(内部的,这个是默认值),public(公有的)三种,


let,var,func enum,struct等等关键字不解释,自己百度


            ********?和! ********


Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,

也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化

。如果在使用变量之前不进行初始化就会报错:


因此有?和!的出现


接下来我们讲讲?和!是怎么用的。

?是可以为空,也可以不为空,如果是空,则printnil,?其实是一个optional类型,optional类型中有一个我们自己定义的属性,如果用这个属性,我们必须拿到这个属性,怎么拿呢,就是!拆包,用!就能拿到,就可以使用

!是一定有值的,否则会崩溃,也是对 ?的拆包。

我们在用这两个的时候一般是这样的,当我们定一个变量的时候,我们会用?,因为这个变量有可能是nil,常量一般我们会用!因let之后我们会给一个初始值的。


同时还可以这样写:   

let testOne : TestOneViewController = (self.storyboard?.instantiateViewControllerWithIdentifier("TestOneViewController") as? TestOneViewController)!

    其中as?是可选类型转化,as是强制类型转换


            ********  代理 ********

swift中的代理我认为和oc中的用法一样,都是回调或者是两个类之间的事件掉用 比如我这里写的,就是在ViewController中实现一个TestOneViewController的一个对象,在TestOneViewController中定义一个delegate的属性,同时还有protocol协议方法,在ViewController中实现这个方法,在TestOneViewController中掉用这个方法,从而达到效果。(其中delegate就是self当前对象,也就是说,自始至终就是ViewController带掉用方法)




          ********  UIView动画 ********


swift中的UIViewoc中的动画样式一样,就是方法掉用的格式不同罢了,参数和功能一样。



          ******** 闭包 ********

swift中的闭包其实也没有那么神秘,有oc经验的人会知道block,其实闭包盒block逻辑一样,可以起到回调的作用,和代理作用差不多。在TestOneViewController中定义属性,掉用,在ViewController实现闭包代码,注意:一定要让代码先走实现的逻辑,在去掉用闭包。否则会崩溃。

具体写法,看代码



          ******** 控件 ********



目前我所常用的和oc中的一样。

          ******** 枚举 ********

c语言的一样,下边有关于UIButton的枚举类型,用法看代码就清楚了,枚举名字可省略。


*/



import UIKit

//import <TestOneViewController>

class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate,backNew {

    @IBOutlet var buttonOk: UIButton?

     var rect_ :CGRect?

    @IBOutlet var viewOne: UIView!

    var myTableView:UITableView?

    

 

    

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        

//       testss(1 ,mv: { (stringtest) -> String in

//        print("闭包+\(stringtest)")

//            return "123"

//        })

        

        

        

        

        view.backgroundColor = UIColor(red: 181.0/255.0, green: 243.0/255.0, blue: 1, alpha: 1)

        myTableView = UITableView(frame: CGRectMake(0, 20, view.frame.width, view.frame.height-20-430), style: UITableViewStyle.Plain)

        myTableView!.dataSource = self

        myTableView!.delegate = self

//        myTableView!.separatorStyle = .None

        view.addSubview(myTableView!)

        myTableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "testCell")

        

        

        

        let strings = "1"

        print("4"+strings)

        

        

        let buttons : UIButton = UIButton(type: .System)

        buttons.frame = CGRectMake(0, buttonOk!.frame.origin.y-70, view.frame.width, 30)

        

        buttons.setTitle( "回复默认颜色", forState: .Normal)

        //

        buttons.setTitleColor(UIColor.init(colorLiteralRed: 0.5, green:0.4, blue:0.8, alpha: 1), forState: UIControlState.Normal)

        buttons.addTarget(self, action: Selector("ceshi:"), forControlEvents: UIControlEvents.TouchUpInside)

        view.addSubview(buttons)

        

        

        var myString:String?

        

        myString = "Hello, Swift!"

        

        if myString != nil {

            print(myString!)

        }else{

            print("myString has nil value")

        }

        

        

        let arra = ["123"]

//        arra.addObject("123")

        var array = ["456"]

        array = array + arra

        print(array)

    }

    func getstrings() -> String//-> String是一个返回类型,相当于oc中的-(NSString *)getstrings的写法

    {

        return "234"

    }

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

     func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int

    {

        return 5

    }

     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

    {

        let cell = tableView.dequeueReusableCellWithIdentifier("testCell")

        

        cell!.textLabel!.text = String(indexPath.row as Int)

        cell!.imageView!.image = UIImage(named:"green.png")

        return cell!

        

    }

     func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)

    {

        switch indexPath.row

        {

        case 0:

            view.backgroundColor = UIColor.grayColor()

        case 1:

            view.backgroundColor = UIColor.blackColor()

        case 2:

            view.backgroundColor = UIColor.blueColor()

        case 3:

            view.backgroundColor = UIColor.whiteColor()

        default:

            view.backgroundColor = UIColor.yellowColor()

            

        }

        print(indexPath.row)

    }

    func ceshi(button : UIButton)

    {

        let title: String = button.currentTitle!

        print("测试"+"+"+title)

        

        

        if (button.selected == false)

        {

            rect_ = self.viewOne.bounds

            UIView.animateWithDuration(1.0,

                delay: 0.0,

                options: .CurveEaseIn,

                animations: {

                    self.viewOne.bounds = CGRectMake(0, 0, 0, 0);

                    

                    

                },

                completion: { finished in

                    self.view.backgroundColor = UIColor.purpleColor()

                    

            })

        }

        else

        {

            UIView.animateWithDuration(1.0,

                delay: 0.0,

                options: .CurveEaseInOut,

                animations: {

                    self.viewOne.bounds = self.rect_!

                    

                    

                },

                completion: { finished in

                    self.view.backgroundColor = UIColor(red: 181.0/255.0, green: 243.0/255.0, blue: 1, alpha: 1)

                    

            })

        }

       button.selected = !button.selected


    }

   

    @IBAction func buttonInto(sender: UIButton) {

        

        let testOne : TestOneViewController = (self.storyboard?.instantiateViewControllerWithIdentifier("TestOneViewController") as? TestOneViewController)!

        testOne.delegate = self

        testOne.stringTitle = "返回"

        testOne.testss(12) { (stringtest) -> String in

            print("闭包+\(stringtest)")

            return ""

        }

        self.presentViewController(testOne, animated: true) { () -> Void in

            

        }

    }

    //前一个页面返回的代理方法

    func changeColor(result:Int)

    {

        

        

//        let views : UIView = view

//        UIView.animateWithDuration(1, animations: { () -> Void in

//            self.viewOne.bounds = CGRectMake(0, 0, 20, 30);

//            

//            }) { (Bool) -> Void in

//                views.backgroundColor = UIColor.redColor()

//        }

        

        UIView.animateWithDuration(1.0,

            delay: 2.0,

            options: .CurveEaseInOut,

            animations: {

                 self.viewOne.bounds = CGRectMake(0, 0, 20, 30);

            },

            completion: { finished in

                self.view.backgroundColor = UIColor.redColor()

        })

        

        print(result)

    }

    

   

}








//

//  TestOneViewController.swift

//  SwiftTest

//

//  Created by Zhengkui Wang  on 16/2/19.

//  Copyright © 2016 Zhengkui Wang . All rights reserved.

//


import UIKit

protocol backNew

{

    func changeColor(result:Int)

}


class TestOneViewController: UIViewController {

    

    typealias sendValueClosure=(stringtest:NSString)->String//typealias 是用来为已经存在的类型重新定义名字的 将闭包作为一个类型存在,有类型了就可以定义属性了,有属性了就可以在想掉用的时候去掉用

    

    @IBOutlet var labelPwd: UILabel!

    @IBOutlet var labelName: UILabel!

    @IBOutlet var buttonSave: UIButton!

    @IBOutlet var textName: UITextField!

    

    @IBOutlet var textPwd: UITextField!

    @IBOutlet var buttonBackRusult: UIButton?

   internal var delegate : backNew?//代理的delegateoc一样

    var stringTitle : String?

     private var myClosure: sendValueClosure?//闭包属性的声明

   

    //含有闭包的方法

    func testss(index : int_fast64_t, mv: sendValueClosure)

    {

        self.myClosure = mv;

//        mv(stringtest: "1")

    }

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view.

        print("1233433")

        buttonBackRusult?.setTitle(self.stringTitle, forState: .Normal)

        

        let string1 : String = "123"

        let string2 = string1

        let inde = 100

        print("123\(inde)213")

        print(string2)

        let def : NSUserDefaults = NSUserDefaults.standardUserDefaults()

        if(( def.objectForKey("name") != nil)&&(def.objectForKey("pwd") != nil))

        {

            textName!.text = def.objectForKey("name") as? String//as?是可选类型转换,  as 是强制类型转换。

            textPwd.text = def.objectForKey("pwd") as? String

            

        }

    

        let stringN: NSString = NSString()

        print(stringN)

    }


    func sayHllos(var index : int_fast64_t)

    {

        index = 100

    }

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

    

    @IBAction func buttonSaveMessage(sender: AnyObject) {

        

        let def : NSUserDefaults = NSUserDefaults.standardUserDefaults()

        def.setValue(textName!.text, forKey: "name")

        def.setValue(textPwd.text, forKey: "pwd")

        

        self.myClosure!(stringtest: "1")//掉用闭包

        

        

    }

    @IBAction func buttonBack(sender: UIButton) {

        if ((delegate) != nil){

            delegate?.changeColor(2)

        }

        self.dismissViewControllerAnimated(true) { () -> Void in

            

        }

    }


    func connetworking()

    {

        

    }

     

    

    /*

    // MARK: - Navigation


    // In a storyboard-based application, you will often want to do a little preparation before navigation

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        // Get the new view controller using segue.destinationViewController.

        // Pass the selected object to the new view controller.

    }

    */


  

}







//

//  SharObjectOneJest.swift

//  SwiftTest

//

//  Created by Zhengkui Wang  on 16/2/23.

//  Copyright © 2016 Zhengkui Wang . All rights reserved.

//


import UIKit


/*

swift 代理的写法

*/


//第一种方式

let _SingletonSharedInstance = SharObjectOneJest()

class SharObjectOneJest  {

    class var sharedInstance : SharObjectOneJest {

        return _SingletonSharedInstance

    }

}



第二种方式

//class SharObjectOneJest {

//    class var sharedInstance : SharObjectOneJest {

//        struct Static {

//            static var onceToken : dispatch_once_t = 0

//            static var instance : SharObjectOneJest? = nil

//        }

//        dispatch_once(&Static.onceToken) {

//            Static.instance = SharObjectOneJest()

//        }

//        return Static.instance!

//    }

//}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值