4.0 swift 代理使用_openstack swift 2.20.0 2.21.0 - CSDN
精华内容
参与话题
  • Swift4.0 简单项目demo

    千次阅读 2018-06-13 19:00:48
    swift4.0基于MVVM开发模式的简单demo1.Alamofire (swift版的AFNetworking)封装与使用2.ESPullToRefresh 上拉加载下拉刷新 简单使用3.Kingfisher(swift版的SDWebImage)使用4.SnapKit(swift版的Masonry)使用5....

    swift4.0基于MVVM开发模式的简单demo

    1.Alamofire (swift版的AFNetworking)封装与使用

    2.ESPullToRefresh 上拉加载下拉刷新 简单使用

    3.Kingfisher(swift版的SDWebImage)使用

    4.SnapKit(swift版的Masonry)使用

    5.SwiftyJSON(swift版本的JSONModel)使用

    6.代理和block的使用

    7.简单视频播放

    下载链接:https://pan.baidu.com/s/1RsJ_3Qxc1QqBRX1eP2b26A

    展开全文
  • Swift4.0 study1 语法

    2018-01-19 10:29:45
    swift学习第一天 :语法 1.常量和变量 var 修饰变量 (可以修改) let 修饰常量(不可变) print代理oc中的NSLog输出 2.数据类型转换:Swift是强语言(OC是弱语言)故进行转换时必须指明数据类型,即...

    swift学习第一天 :语法
    1.常量和变量

    var 修饰变量 (可以修改)
    let 修饰常量(不可变)
    print代理oc中的NSLog输出

    2.数据类型转换:Swift是强语言(OC是弱语言)故进行转换时必须指明数据类型,即Swift中不存在隐式类型转换,全部都是显示的

    例子:

    1.普通转换
    let num1 = 10  //Int 类型
    let num2 = 2.3 //Double 类型
    let num = num1 + Int(num2) //必须转为统一类型才能进行运算,num为Int类型
    print(num) //输出 12
    2.强制类型转换
    let num3:Int = Int(num2)
    注意:Swift中数据类型首字符大写
    


    3.分支

    1.if
    Swift 中的if的使用方式“基本上”和oc一致
    (1).Swift中的if可以省略()
    (2).Swift中即使if后面只有一条语句,也不能省略{}
    (3).Swift中if的判断条件,只能放bool值,取值只有ture/false

     let num4 = 10
     if num4 == 10
     {
     print("1")
     }



    在swift中三目运算符用的特别多

    let num44 = (num4 == 10) ? 10:5
    print(num44)



    2.switch
    Swift 中的switch
    (1).后面的()可以省略
    (2).oc中如果没有break会穿透,但是Swift中不会
    (3).oc中如果要在case中定义变量,必须加上{},但是Swift中不用
    (4).oc中的default的位置随便,但是Swift中的default只能放最后

    let num5 = 2
    switch num5 {
        case 1:
        break
        case 2:
        break
        default:
        break
    }



    3.for
    普通for循环 和oc中基本一致
    特色:
    (1). 0..<10 代表一个区间范围 ,从0 - 9 ,包头不包尾
    (2). 0…10 代表一个区间范围 ,从0 - 10 ,包头包尾

    for var i in 0..<10 {
                print(i)
            }
    for  i in 0...10 {
                print(i)
            }



    (2). _ 代表忽略,如不关心某个参数,就可以使用_

    for _ in 0..<10 {
               print("sch")
            }



    4.while:开发中很少用,“基本”和oc用法一致

    var num6 = 0
    while num6 < 10 {
          print(num6)
          num6=num6+1
     }



    5.do while:在Swift2.0之后用repeat while代替,do用作捕获异常

    var num7 = 0
    repeat{
        print(num7)
        num7=num7+1
    }while num7 < 10



    6.可选类型:Optional 代表着可有可无 即一个方法或数据类型后面有?,就代表着是一个可选类型

    
    let url = NSURL(string:"https://www.baidu.com")
    print(url)//输出:Optional(https://www.baidu.com)



    注意:可选类型打印出来呗Optional包裹,如果不想被Optional包裹,加 !

     let url = NSURL(string:"https://www.baidu.com")
     print(url!)//输出:https://www.baidu.com



    !代表告诉编译器 可选类型一定有值,可以强制解析;如果可选类型中没有值,又进行了强制解析,程序会崩溃
    Swift的用意是想让我们将大部分运行时的错误,都在编译时解决,即从运行时转到了编译时
    故为防止程序出现崩溃,我们应该做的更为严谨一点

    let url = NSURL(string:"https://www.baidu.com")
    if url != nil{
          print(url!)
    }



    鉴于上面这种方法,苹果官方也给出了更为严谨的方法:可选绑定

    //urlFinal:是在url判断有值得情况下 将值取出来赋给urlFinal,故urlFinal一定有值
    if let urlFinal = url {
          print(urlFinal)
    }


    7.数组:和oc的区别就是去掉前面的@符号

    let dataList:NSArray = ["11","q"]


    8.字典

    (1).创建字典 用 []
    [String:Any] 常见的类型

      let dict:[String:Any] = ["name":"sch","age":25]
      print(dict) 



    (2).获取value

    if let nameFinal = dict["name"] {
           print(nameFinal)
    }



    (3).遍历

    //利用元祖类型遍历字典,会自动将字典中的key赋值给元祖中的第一个变量,将value估值给元祖中的第二个变量
    for (key,value) in dict {
         print(key)
         print(value)
    }



    (3).新增key / value

    var dict1:[String:Any] = ["name":"sch","age":25]
    dict1["sex"] = "boy"
    print(dict1)//输出:["name": "sch", "age": 25, "sex": "boy"]



    (4).更新key / value
    如果对应的key在字典有会更新,如果没有就新增

    dict1["name"] = "you"
    print(dict1)//输出:["name": "you", "age": 25, "sex": "boy"]



    (5).删除

    dict1.removeValue(forKey: "name")
    print(dict1)//输出:["age": 25, "sex": "boy"]



    (5).合并:就是遍历和新增/更新的集合

    for (key,value) in dict {
        dict1[key] = value
    }
        print(dict1)//输出:
    ["age": 25, "sex": "boy", "name": "sch"]

    9.字符串

    字符串string用””
    oc中的字符串是一个对象,继承于NSObject
    swift中的字符串是一个结构体,性能比oc中的高
    (1) .拼接

    var str = "123"
    let str1 = "456"
    str += str1
    print(str)



    (2).格式化

    //方法一:
    //目标:name=sch,age=25
    //swift中可以使用\()来拼接其他值
    var n = "sch"
    let a = "25"
    str = "name=\(n),age=\(a)"
    print(str)//输出:name=sch,age=25


    //方法二:
    //所有的值必须放在arguments数组中,哪怕只有一个值
    //09:02:23
    str = String(format:"%02d:%02d:%02d",arguments:[9,2,23])
    print(str)//输出:09:02:23



    (3).截取:建议使用oc字符串的截取方法,应为swift的字符串截取太复杂
    swift和oc中字符串可以和oc中的字符串非常非常方面进行转换

    var str2:NSString = "sch is studing";
    var str4 = str2.substring(with: NSMakeRange(0, 3))
    print(str4)//输出:sch


    10.函数

    Swift函数的格式”
    语义:将前面计算的结果返回给 -> 返回值
    func 函数名(参数列表) -> 返回值
    {
    执行代码
    }
    (1).没有参数,没有返回值

    //没有返回值写viod 
    func sch() -> Void{
       print("sch")
    }
    //也可以简写用()代替viod
    func sch1() -> (){
          print("sch1")
    }
    //或者直接省略 -> ()/-> Void
    func sch2(){
          print("sch1")
    }



    (2).没有参数,有返回值

    func sch3() -> String {
        return "sch3"
    }



    (3).有参数,没有返回值

    func sch4(url:String,a:Int) {
          print("sch4")
    }//调用:sum(a: 2, b: 3)
    func sum(a:Int,b:Int) {
         print(a+b)
    }//调用:sum(a: 2, b: 3)



    (4).有参数,有返回值

    func sum1(a: Int, b: Int) -> Int{
        return a+b
    }

    展开全文
  • iOS 蓝牙开发(ble4.0) -swift

    千次阅读 2017-06-23 17:20:26
    CmdBluetooth ... CmdBluetooth是一个针对于iOS的轻量级可扩展框架,Core内部将蓝牙周边抽象化,用户无需关注蓝牙内的操作细节与流程,仅需要你们自己的蓝牙协议,创造出自己的命令对象。 以往的蓝牙协议都是集中式...

    CmdBluetooth

    项目地址:https://github.com/ZeroFengLee/CmdBluetooth

    CmdBluetooth是一个针对于iOS的轻量级可扩展框架,Core内部将蓝牙周边抽象化,用户无需关注蓝牙内的操作细节与流程,仅需要你们自己的蓝牙协议,创造出自己的命令对象。

    以往的蓝牙协议都是集中式处理,出现逻辑复杂且混乱的现象,以至于扩展困难。CmdBluetooth将蓝牙的每条协议封装成不同命令对象,将复杂的逻辑分发下去,使得代码可读性增强,这也使得CmdBluetooth可以轻松的处理蓝牙协议的串行操作。

    我们团队当前开发使用的是OC版本,已经适用于5套以上不同的蓝牙协议。swift版本在完善中,如果你有好的建议,欢迎提交你的PR。

    开始使用

    • 将文件夹 "CmdBluetoothCore"导入到项目中
    • 参照文件夹 "CMDS" 根据具体的蓝牙协议封装命令
    • 参照 "ViewController"中使用框架

    框架结构

    CmdBluetoothCore

    • CentralManager
    • BaseParser
    • BaseCommand
    • D2PHosting
    • ParserSession
    • CmdConstants

    CMDS

    下面文件是使用者需要修改和扩展的,MyParser继承于BaseParser,SynTimeCmd继承于BaseCommand

    • MyParser
    • SynTimeCmd

    下面是每个类文件的角色解释

    Class name 解释 备注
    CentralManager 蓝牙中央的管理器,主要功能:蓝牙的搜索链接等操作  
    BaseParser 基础解析器类 创建自己的解析器时,务必继承此类,可以省掉很多基本操作
    BaseCommand 命令的基类,做了很多基础工作,如超时的定时器管理等 任何命令类都必须继承此类
    D2PHosting 在命令没开始/结束后,D2PHosting接管代理权,监听设备传向App的数据 这里可以处理设备的请求,如找手机等协议操作
    ParserSession 蓝牙解析器的抽象类  
    CmdConstants 常量管理类

    使用

    1. 拥有自己的解析器

      你只需要继承BaseParser类,并创建你的写入方法,请参照MyParser.swift

        /**
        define types for writing data to BLE device, like this
        */
        func writeDataWithResponse(data: NSData) {
    
            super.writeData(data, characterUuidStr: "fff6", withResponse: true)
        }
    
        func writeDataWithoutResponse(data: NSData) {
    
            super.writeData(data, characterUuidStr: "ff10", withResponse: false)
        }
    
        //......Many....many ^_^!
    1. 创建蓝牙命令 (假如你有20个蓝牙命令,那你需要20个这样的文件)

      请参照SynTimeCmd(时间同步命令),蓝牙主要是问答式的。

    2. 在命令开始前,一定要调用父类的start()方法去判断解析器是否可用。

        if !super.start() {
            //...
        }
    3. 在调用start()方法前,你可以设置超时时间(default:4)
        super.timeoutInterval = 5
    4. 在往蓝牙写数据时,记得把parserSession转成自己的解析器
        (self.parserSession! as! MyParser).writeDataWithResponse(self.testData())
    5. 复写父类的failure()方法,并调用super.failure()。检测超时失败的情况

        override func failure() {
      
            super.failure()
        }
    6. 在成功后调用父类的finish()刷新解析器的状态

        case 1:
            closureSuccess!()
            super.finish()
            break
    7. 使用CentralManager类来进行蓝牙的扫描链接等

      比较简单,请参照Demo.
      注意点:一定要传入自己的解析器对象,否则连接的周边无法被解析

      centerManager.parser = MyParser()
    8. 发送蓝牙协议

       SynTimeCmd().setCurrentTime({ () -> Void in
      
           print("suc")
       ) { () -> Void in
      
           print("fail")
       }
    展开全文
  • // AppDelegate.swift // ReverseSendValue import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplica
    //  AppDelegate.swift
    //  ReverseSendValue
    import UIKit
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
        var window: UIWindow?
        func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
            let first=FirstViewController()
            first.view.backgroundColor=UIColor.whiteColor()
            let navi=UINavigationController(rootViewController: first)
            window?.rootViewController=navi
            return true
        }
    }

    //  FirstViewController.swift
    //  ReverseSendValue
    import UIKit
    //屏幕尺寸
    let kWidth=UIScreen.mainScreen().bounds.size.width
    let kHeight=UIScreen.mainScreen().bounds.size.height
    //遵守SecondViewControllerDelegate协议
    class FirstViewController: UIViewController,SecondViewControllerDelegate {
        override func viewDidLoad() {
            super.viewDidLoad()
            //搭建视图
            createUI()
        }
        //搭建视图
        func createUI(){
            let frame=CGRectMake(UIScreen.mainScreen().bounds.size.width/2-120, 200, 240, 50)
            let resultLb=UILabel(frame: frame)
            resultLb.text="haha@wahaha.com"
            resultLb.textAlignment=NSTextAlignment.Center
            self.view.addSubview(resultLb)
            resultLb.tag=100
            let btn=UIButton()
            btn.frame=CGRectMake(kWidth/2-40, CGRectGetMaxY(resultLb.frame)+20, 100, 40)
            btn.setTitle("修 改", forState: .Normal)
            btn.backgroundColor=UIColor.blueColor()
            btn.addTarget(self, action: Selector("gotoChangeValue"), forControlEvents: .TouchUpInside)
            self.view.addSubview(btn)
        }
        //跳转到修改的视图
        func gotoChangeValue(){
            let second=SecondViewController()
            let lb=self.view.viewWithTag(100) as! UILabel
            second.text=lb.text
            //设置代理
            second.delegate=self
            self.navigationController?.pushViewController(second, animated: true)
        }
        //代理方法
        func sendValue(value:String?){
            let lb=self.view.viewWithTag(100) as! UILabel
            lb.text=value
        }
    }

    //  SecondViewController.swift
    //  ReverseSendValue
    import UIKit
    //协议
    protocol SecondViewControllerDelegate{
        //协议方法
        func sendValue(value:String?)
    }
    class SecondViewController: UIViewController {
        var text:String?
        //代理属性
        var delegate:SecondViewControllerDelegate?
        override func viewDidLoad() {
            super.viewDidLoad()
            self.view.backgroundColor=UIColor.whiteColor()
            //搭建界面
            createUI()
        }
        //搭建界面
        func createUI(){
            let textField=UITextField()
            textField.frame=CGRectMake(kWidth/2-120, 200, 240, 50)
            textField.text=text
            textField.borderStyle=UITextBorderStyle.RoundedRect
            textField.keyboardType=UIKeyboardType.EmailAddress
            textField.textAlignment=NSTextAlignment.Center
            self.view.addSubview(textField)
            textField.tag=101
            let btn=UIButton()
            btn.frame=CGRectMake(UIScreen.mainScreen().bounds.size.width/2-40, CGRectGetMaxY(textField.frame)+20, 100, 40)
            btn.setTitle("修改完成", forState: .Normal)
            btn.backgroundColor=UIColor.orangeColor()
            btn.addTarget(self, action: Selector("doneAction"), forControlEvents: .TouchUpInside)
            self.view.addSubview(btn)
        }
        //完成修改
        func doneAction(){
            let tf=self.view.viewWithTag(101) as! UITextField
            if((delegate) != nil)
            {
                delegate?.sendValue(tf.text)
                self.navigationController?.popViewControllerAnimated(true)
            }
        }
        //隐藏键盘
        override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
            self.view.endEditing(true)
        }
    }



    展开全文
  • Swift 传值之代理传值

    千次阅读 2016-01-29 16:38:55
    Swift中,传值的方法有很多,都很简便,之前介绍了属性传值,swift的属性传值可以从下级页面传到上级页面,现在来介绍如何用代理传值。
  • Swift4.0入门视频教程,课程内容包含Swift入门知识、数据类型(元组、Dictionary、运算符)、流程控制、函数、类与对象、扩展协议、常见概念、实用进阶、案例实战。 1、119节大容量课程:包含了Swift4.0语言大部分...
  • //// ViewController.swift// 007-可选项的判断//// Created by 庄壮勇 on 2018/1/2.// Copyright © 2018年 Personal. All rights reserved.//import UIKitclass ViewController: UIViewController { override...
  • 简单介绍下Swift代理设计模式的使用和闭包的传值 一、代理模式 代理简单的说就是让别人帮助自己做一些不能或者不方便做的事。 实现代理有以下几步: 1.写一个协议,定义代理方法,就是需要做的事情 2.有两个对象...
  • 苹果官方的文档一般都很少去看,笔者参考官方文档和各路大神的经验,写下了一份基于Swift 4.0 的编码规范,并会持续更新,欢迎大家补充指正。 编码格式 命名规范 语法规范 1. 编码格式 1.1 使用二元...
  • 升级Swift4.0遇到的坑

    万次阅读 2017-09-12 19:36:19
    升级Swift4.0 并不是所有库都能做到及时支持Swift4.0,更何况是在现在连Xcode9也还是beta的状态 所以我们仅能做到将自己的业务代码(主工程代码)部分升级到Swift4.0,然后同时保留各种pod库在Swift3.2版本。 没...
  • 前面总结了几篇关于Swift使用,今天要讲的是关于使用Swift开发IOS中蓝牙4.0的开发流程,我以前只是会搞android的蓝牙开发,最近开始了Swift的学习,作为一个swift爱好者,想把蓝牙4.0的这个装逼神器在swift使用...
  • 具体的代码,详见Demo:马上补充 rootViewController class ViewController: UIViewController,GetMessageDelegate { var _button:UIButton? var _label:UILabel? ... override func viewDidLoad() ...
  • Swift4.0创建列表视图UITableView

    千次阅读 2018-01-04 17:14:17
    四个步骤 1.创建模拟数据源(数组) var dataSuorceArray = ["123","456","789"] 2.声明控件 var forthTableView:UITableView ...forthTableView = UITableView(frame:self.view.bounds) ... forthTa
  • Swift 4.0 纯代码实现UITableView

    千次阅读 2018-02-01 17:46:19
    class ViewControllerI: UIViewController,UITableViewDelegate,UITableViewDataSource { var mytableView : UITableView? let testValue:NSString = "这是测试内容\n这是测试内容\n这是测试内容\n这是测试内容\n这...
  • swift4.0 UITableView纯代码实现

    万次阅读 2017-07-24 21:07:00
    // ViewController.swift // ListView // // Created by 朱莹浩 on 2017/7/22. // Copyright © 2017年 朱莹浩. All rights reserved. // import UIKit class ViewController: UIViewController, ...
  • Swift4.0互动教程》正式发布

    千次阅读 2017-12-26 10:49:31
    免费下载地址:https://itunes.apple.com/cn/app/id1320746678◈ 不看视频不看书,手把手带您学习Swift语言◈ 利用手指来互动式学习Swift 4.0◈ 无痛上手,比观看视频、阅读书籍更加有趣、更加有效的学习方式 ◈ 变...
  • Swift3.0-反向传值

    千次阅读 2017-02-03 16:22:11
    Swift3.0-反向传值 ...1、使用代理协议 在ViewController.swift中 class ViewController: UIViewController,SubDelegate { override func viewDidLoad() { super.viewDidLoad() // setNavigation() m
  • Swift4.0 如何正确的写Delegate 模式

    千次阅读 2018-01-15 15:51:34
    由于项目中要开始转想 swift4.0了,说一下Delegate 在swift使用方式。 @objc protocol AADelegate{  func okAction()  //必须方法  @objc optional func clickAction() //可选方法 }   weak...
  • 经过第一天的学习,对Swift语法已基本会用,今天就就来初始化一下项目,在项目中进行实战学习。(发布的这些博客 完全按照自己的学习思路进行发布) 新建项目及模块文件夹的过程和oc一致,只要记得语言选择Swift。...
  • swift4.0 TableView和自定义cell

    万次阅读 2018-01-29 09:57:50
    本文有snapkit三方布局的使用,类似于masonry,自己了解一下 另外用懒加载的方法添加了表头 一、tableView和协议实现 // // MineViewController.swift // SwiftTest18-1-5 // // Created by EricZhang ...
1 2 3 4 5 ... 20
收藏数 964
精华内容 385
关键字:

4.0 swift 代理使用