• 最近做个项目,需要实时的监听网络连接状态,网络连接断开时需要提醒用户手动打开网络,网络重新连接上之后需要做些操作。

    最近项目里有个新需求,需要实时的监听网络连接状态,网络连接断开时需要提醒用户手动打开网络,网络重新连接上之后需要做些操作。

    如何实现实时监听网络连接状态?

    第一步,需要引入Reachability.swift文件

    下载链接:https://github.com/ashleymills/Reachability.swift

    使用方法:
    Just drop the Reachability.swift file into your project. That’s it! (直接找到Reachability.swift文件拖到你的项目中就可以啦。)
    这里写图片描述

    第二步,进入到ViewController文件

         /********************************************** 网络状态监听部分(开始) **********************************************/
        // Reachability必须一直存在,所以需要设置为全局变量
        let reachability = Reachability()!
        
        func NetworkStatusListener() {
            // 1、设置网络状态消息监听 2、获得网络Reachability对象
            NotificationCenter.default.addObserver(self, selector: #selector(self.reachabilityChanged),name: ReachabilityChangedNotification,object: reachability)
            do{
                // 3、开启网络状态消息监听
                try reachability.startNotifier()
            }catch{
                print("could not start reachability notifier")
            }
        }
        
        // 移除消息通知
        deinit {
            // 关闭网络状态消息监听
            reachability.stopNotifier()
            // 移除网络状态消息通知
            NotificationCenter.default.removeObserver(self, name: ReachabilityChangedNotification, object: reachability)
        }
        
        // 主动检测网络状态
        func reachabilityChanged(note: NSNotification) {
            
            let reachability = note.object as! Reachability // 准备获取网络连接信息
            
            if reachability.isReachable { // 判断网络连接状态
                print("网络连接:可用")
                if reachability.isReachableViaWiFi { // 判断网络连接类型
                    print("连接类型:WiFi")
                    // strServerInternetAddrss = getHostAddress_WLAN() // 获取主机IP地址 192.168.31.2 小米路由器
                    // processClientSocket(strServerInternetAddrss)    // 初始化Socket并连接,还得恢复按钮可用
                } else {
                    print("连接类型:移动网络")
                    // getHostAddrss_GPRS()  // 通过外网获取主机IP地址,并且初始化Socket并建立连接
                }
            } else {
                print("网络连接:不可用")
                DispatchQueue.main.async { // 不加这句导致界面还没初始化完成就打开警告框,这样不行
                    self.alert_noNetwrok() // 警告框,提示没有网络
                }
            }
        }
        
        // 警告框,提示没有连接网络 *********************
        func alert_noNetwrok() -> Void {
            let alert = UIAlertController(title: "系统提示", message: "请打开网络连接", preferredStyle: .alert)
            let cancelAction = UIAlertAction(title: "确定", style: .default, handler: nil)
            alert.addAction(cancelAction)
            self.present(alert, animated: true, completion: nil)
        }
        /********************************************** 网络状态监听部分(结束) **********************************************/
    
    

    已在真机上测试成功,切换网络状态时控制台能输出对应的Log。

    展开全文
  • Swift联网测试

    2016-10-30 21:39:14
    测试内容:123129199#

    ContentBegin:

    Version:V1.1(20161029)VersionEnd

    Date:2016.10.25DateEnd

    Gift1:2016.10.26Gift1End

    ContentEnd#

    DailyBegin:傻蛋芝士今天被flash气死了噢?但是玩了一个下午加一个晚上?开心死了哦?!土豆唱了一天歌要累死啦~芝士要不要考虑安慰土豆噢?DailyEnd#

    展开全文
  • iOS常见的权限状态和请求授权 ZRAutorizationManager封装了iOS开发中常用的相册,相机,麦克风推送,日历,联系人,定位等权限的状态和主动请求授权,一行代码搞定繁琐的权限状态和请求过程.
  • 基本操作: git clone -b swift-5.1-branch https://github.com/apple/swift-format.git cd swift-format ...swift build # 会联网拉取依赖 【github地址】 https://github.com/apple/swift-format ...

    基本操作:

    git clone -b swift-5.1-branch https://github.com/apple/swift-format.git
    
    cd swift-format
    
    swift build # 会联网拉取依赖
    

    【github地址】
    https://github.com/apple/swift-format

    展开全文
  • 原文出自:www.hangge.com 转载请保留...1,Reachability.swift 是一个使用Swift写的第三方网络检测类。 可以测试网络是否连接,并支持3G和Wifi的检测。 使用样例:import UIKitclass ViewController: UIViewCont

    原文出自:www.hangge.com 转载请保留原文链接:http://www.hangge.com/blog/cache/detail_778.html
    1,Reachability.swift 是一个使用Swift写的第三方网络检测类。
    可以测试网络是否连接,并支持3G和Wifi的检测。
    这里写图片描述

    使用样例:

    import UIKit
    
    class ViewController: UIViewController {
    
        @IBOutlet weak var statusLabel: UILabel!
        @IBOutlet weak var typeLabel: UILabel!
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        @IBAction func checkConnect(sender: AnyObject) {
            let reachability = Reachability.reachabilityForInternetConnection()
    
            //判断连接状态
            if reachability!.isReachable(){
                statusLabel.text = "网络连接:可用"
            }else{
                statusLabel.text = "网络连接:不可用"
            }
    
            //判断连接类型
            if reachability!.isReachableViaWiFi() {
                typeLabel.text = "连接类型:WiFi"
            }else if reachability!.isReachableViaWWAN() {
                typeLabel.text = "连接类型:移动网络"
            }else {
                typeLabel.text = "连接类型:没有网络连接"
            }
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    }

    源码下载:hangge_778.zip

    2,Reachability.swift 还能监听网络变化,当网络切换的时候会发出通知
    具体代码可以访问它的主页:Reachability.swift

    展开全文
  • MD5的全称是MessageDigest Algorithm 5,即消息摘要算法第五版,是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。在90年代初由MIT Laboratory for Computer Science 和RSA Data Security Inc的...

           在大多数的iOS开发者看来,采用沙箱机制的iOS系统是很安全的,但事实上,iOS系统及里面的应用并没有想象中那么安全。和安卓应用相似,iOS应用也面临着被破解的威胁,存在大量内购破解、源代码破解、植入病毒或广告、二次打包等情况。

           这就需要对应用程序中进进出出的数据进行加密处理,以保护用户的数据和隐私。那么可以通过加密保护哪些数据呢?

    • 对设备中存储的内容进行加密:开发者经常使用UserDefaults、plist文件、CoreData框架等作为数据存储的载体。在存入数据之前对数据进行一些加密操作,可以增强数据的安全性。
    • 对网络传输的数据进行加密:大部分的iOS应用都需要联网,通过和服务器端进行通信,获得最新的信息并且将内容展现给用户。由于网络传输过程中有可能经过不安全的中间节点,所以应该对敏感数据加密,以保证用户信息的安全。
    • 对账户密码进行加盐操作:加盐Salt在密码学中是指,通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这个过程称之为加盐。加盐后的账户密码再经过诸如MD5等方式的加密,然后与服务器端采用同样加盐和加密的密码进行比较,如果两个密码相同,则密码匹配成功。这样无论在客户端还是服务器,当传输的密码被截获后,即使解密成功也无法还原出原始的密码。

    对称加密和非对称加密

           加密技术是利用一些技术手段,把重要的数据变为乱码进行数据的传送,当到达目的地后,再用相同或不同的手段进行解密和还原。

           对数据加密的技术分为两类,即对称加密(私人密钥加密)和非对称加密(公开密钥加密)。对称加密以Data Encryption Standard数据加密标准算法即DES为典型代表,非对称加密通常以RivestShamir Adleman即RSA算法为代表。

           对称加密采用对称密码编码技术,它的特点是对数据加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫作对称加密算法,其具有简单快捷、密钥较短、破译困难等特点,如图1所示。

    图1

           与对称加密算法不同,非对称加密算法需要两个密钥,一个是公有密钥(Public key),另一个是私有密钥 (Private key)。如果使用公有密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公有密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法,如图2所示:
    图2

    MD5加密

           MD5的全称是MessageDigest Algorithm 5,即消息摘要算法第五版,是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。在90年代初由MIT Laboratory for Computer Science 和RSA Data Security Inc的Ronald L.Rivest开发,经MD2、MD3和MD4发展而来。

           MD5可以将任意长度的字节串变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串。

           MD5的典型应用场景是对一段信息生成指纹,以检测信息是否被篡改。例如将一段文字写在一个文本文件中,并对这个文本文件生成一个MD5的值。然后在对该文件进行传播的过程中,如果其它人修改了文件中的任意内容,当对修改后的文件重新计算MD5时,就会发现新旧两个文件的MD5值是不相同。所以我们经常使用MD5对下载的软件进行校验,以检验软件是否被第三方植入病毒代码或广告代码。


    1、创建项目并建立桥接文件

           接着我们来创建一个示例项目,对一个字符串进行MD5加密。首先创建一个基于[Single View Applicaton]模板的空白项目,然后在左侧的项目名称文件夹上点击鼠标右键,并选择右键菜单中的[New File...]选项,创建一个桥接头文件,这是因为我们需要使用到Object-C的CommonCrypto.h。

           完成桥接头文件的创建之后,再使用与上一个示例相同的方式,对桥接头文件的路径进行设置,从而完成项目的配置工作,如图3所示:


    图3

           然后继续在左侧的项目名称文件夹上点击鼠标右键,并选择右键菜单中的[New File...]选项,从而创建一个.swift文件,我们将在该文件中对String进行扩展:

    //
    //  StringMD5.swift
    //  SecurityProjectMd5
    //
    //  Created by Jerry on 2017/1/10.
    //  Copyright © 2017 www.coolketang.com. All rights reserved.
    //
    
    import Foundation
    
    extension Int
    {
        func hexedString() -> String
        {
            return NSString(format:"%02x", self) as String
        }
    }
    
    extension NSData
    {
        func hexedString() -> String
        {
            var string = String()
            let unsafePointer = bytes.assumingMemoryBound(to: UInt8.self)
            for i in UnsafeBufferPointer<UInt8>(start:unsafePointer, count: length)
            {
                string += Int(i).hexedString()
            }
            return string
        }
        func MD5() -> NSData
        {
            let result = NSMutableData(length: Int(CC_MD5_DIGEST_LENGTH))!
            let unsafePointer = result.mutableBytes.assumingMemoryBound(to: UInt8.self)
            CC_MD5(bytes, CC_LONG(length), UnsafeMutablePointer<UInt8>(unsafePointer))
            return NSData(data: result as Data)
        }
    }
    
    extension String
    {
        func MD5() -> String
        {
            let data = (self as NSString).data(using: String.Encoding.utf8.rawValue)! as NSData
            return data.MD5().hexedString()
        }
    }

           从代码中可以看出MD5加密和SHA1加密的步骤基本相似。不同之处是在第16行的代码中,给NSData添加了一个名为MD5的扩展方式,用来实现数据的MD5加密。在加密过程中,首先创建一个CC_MD5_DIGEST_LENGTH长度的可变数据对象。接着通过CC_MD5方法,对数据进行加密,并将加密后的数据存储于可变数据对象。最后将结果转换为NSData格式并返回。

           在第24行的代码中,对String类进行扩展,并添加一个名为MD5的扩展方法。当调用该方法时,首先将字符串转换为NSData对象,并采用UTF-8的编码方式。接着调用NSData的两个扩展方法,完成对字符串的加密操作,并返回十六进制的结果。


    2、修改viewDidLoad方法

           和使用SHA1算法进行加密的示例项目相同,最后一步也是修改ViewController类的viewDidLoad方法,在该方法中对字符串coolketang.com进行MD5加密操作,并在日志区输出加密后的结果,以及密文的长度信息:

    //
    //  ViewController.swift
    //  24.1.2SecurityProject_MD5
    //
    //  Created by Jerry on 2017/1/10.
    //  Copyright © 2017 www.coolketang.com. All rights reserved.
    //
    
    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a nib.
            
            let message = "coolketang.com"
            print("Result:"+message.MD5())
            print("Length:\(message.MD5().lengthOfBytes(using: String.Encoding.utf8))")
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
    
    }
    
    

    现在已经完成了所有的MD5加密功能的编码工作,点击Xcode界面左上角的[编译并运行]按钮  ,打开模拟器运行项目。项目运行后,将弹出一个空白的模拟器,并在日志区输出加密后的结果,如图4所示:


    图4





    新 作

    iOS开发中的神兵利器

    共140节课程,讲解GitHub中近百个过千star的iOS热门开源项目
    市面上唯一大规模讲解GitHub中热门的iOS开源项目的教程
    快速、优雅地解决iOS开发工作中遇到的各种棘手问题

    视频观看地址:http://study.163.com/course/courseMain.htm?courseId=1003657013

    互动教程下载地址:https://itunes.apple.com/cn/app/id1209739676





    展开全文
  • 1.iina A few of the Features: Based on mpv, which provides the best decoding capacity on macOS Designed for modern macOS (10.10+), aims to offer the best user experience All the features you nee...
  • Swift学习资料@SwiftGuide很赞 的Swift学习资料leetcode一个练习、评估自己水平的代码平台,跟ACM有点类似完整App@Swift 30 Projects- 最新 Swift 3.0 的30个小App,更注重代码规范和架构设计(故胤道长)V2ex-Swift- ...
  • 先创建我们所要用到的文件,如:StudentsViewController My... 接着创建 DetailViewController News文件 语言要选择OC,用以实现与Swift语言的混编接着实现我们具体的代码,与OC不同,在Swift中我们要先在AppDelegate.s
  • SBLayout是基于Swift4 封装系统的约束而成的单文件约束框架,总代码700多行,支持iOS9及其以上版本,一行代码可以搞定任意难度的AutoLayout约束 使用方法如下: 实例: let redView = UIView() re
  • swift3.0网络状态监听,判断是wifi还是手机数据
  • 2015年12月3日,Apple正式开源了Swift编程语言。 通过开源整个编程语言,Apple现在允许来自世界各地的开发人员为该语言做出贡献并协助其开发和发展。 除此之外,Swift编程语言现在可以在Apple平台之外的环境中使用,...
  •   鶸学python看到错误处理这一章的时候,就想对比着swift来研究一下。   本文前面是Error苹果文档的介绍,然后对Alamofire中的使用作简单介绍作为实践;后面还有关于fatalError和高级语言错误处理机制的理解。 ...
  • 代码行2执行完,执行代码行3.可以达到预期效果。 异常逻辑: 代码行2是个数据处理(黑盒)。并没有立即返回一个错误 返回一个错误, notifyError。但是代码还是行代码行3了。这就是bug了 比较low的解决办法有:...
  • swift 框架大全

    2017-06-26 11:27:09
    版本:Swift github排名 https://github.com/trending,github搜索:https://github.com/search 主要工作说明:  1. 将Swift从Objective-C混合的md文件中抽出(正在进行…) 使用方法:根据目录关键字...
  • 有时候我们的APP需要联网或者其他比较耗时的操作,需要给用户提示,提示的好办法是进度条或者一个转圈的齿轮,提示用户有操作在进行。我们在上一话的场景中增加两个按钮,下载和停止,点击下载齿轮就开始转,点击...
  • swift 学习资料大全

    2017-07-15 18:22:50
    版本:Swift github排名 https://github.com/trending,github搜索:https://github.com/search 主要工作说明:  1. 将Swift从Objective-C混合的md文件中抽出(正在进行…) 使用方法:根据目录关键字...
  • 字号:大 中 小 1、SWIFT简介SWIFT 是“环球同业银行金融电讯协会”( Society for Worldwide Interbank Financial Telecommunication)的英文缩写,它是一个国际银行间非盈利的国际合作组织,总部设在比利时的...
  • 由于本人的电脑是Windows10系统,关键是没有钱买Imac,因此想要成功运行swift语言,就只能选择安装黑苹果,现在安装黑苹果的技术已经相当成熟,在网上随便就可以的很多帖子,但是安装黑苹果的方法大概也就分为两种...
  • 读取网络时间完整代码
1 2 3 4 5 ... 20
收藏数 701
精华内容 280