/
// ViewController.swift
// SwiftTest
//
// Created by Zhengkui Wang on 16/2/15.
// Copyright © 2016年 Zhengkui Wang . All rights reserved.
//
/*
******* 基本语法 ********
swift语法简单,有c语言功底的一看就知道怎么回事,慢慢习惯就好。
官网上说,swift兼容oc和js,而oc兼容c和c++,所以swift兼容oc,c,c++,js语言,swift语法简单,容易让人接受,功能强大,还很安全,真是一个好东西。
swift有属性有存储属性和计算属性,其实存储属性就是结构体中的字段或者某一个类中的一个属性。计算属性就是我们oc中的setget方法的属性咯。
swift不用倒入头文件,属性和方法分为private(私有的),internal(内部的,这个是默认值),public(公有的)三种,
let,var,func enum,struct等等关键字不解释,自己百度
********?和! ********
Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,
也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化
。如果在使用变量之前不进行初始化就会报错:
因此有?和!的出现
接下来我们讲讲?和!是怎么用的。
?是可以为空,也可以不为空,如果是空,则print是nil,?其实是一个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中的UIView和oc中的动画样式一样,就是方法掉用的格式不同罢了,参数和功能一样。
******** 闭包 ********
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?//代理的delegate和oc一样
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!
// }
//}