金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 编程 > SWIFT推送之本地推送,Docker源码编译

SWIFT推送之本地推送,Docker源码编译

发布时间:2019-12-04 07:40编辑:编程浏览(99)

    官方建议docker源码编译在docker容器内进行,因为官方提供的容器内已经继承了编译需要的环境,如果非要自己搭建编译环境也不是不可以,就是稍微有些繁琐。以下以1.8.2版本为例。

    SWIFT推送之本地推送(UILocalNotification)

    本地推送通知是通过实例化UILocalNotification实现的。要实现本地化推送可以在AppDelegate.swift中添加代码实现,本事例是一个当App进入后台时推送一条消息给用户。

    1.首先在didFinishLaunchingWithOptions方法内添加代码,IOS8推送消息首先要获得用户的同意,在初次安装App时会提示用户是否允许程序推送消息,此方法是App第一次运行的时候被执行一次,每次从后台激活时不执行该方法.

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

            if (UIDevice.currentDevice().systemVersion as NSString).floatValue >= 8 {

                //APService.registerForRemoteNotificationTypes(

                    //UIUserNotificationType.Badge.rawValue |

                    //UIUserNotificationType.Sound.rawValue |

                    //UIUserNotificationType.Alert.rawValue,

                    //categories: nil)

                

                application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes:

                    UIUserNotificationType.Badge |

                    UIUserNotificationType.Sound |

                    UIUserNotificationType.Alert, categories: nil))

            

            }

            

            APService.setupWithOption(launchOptions)

            return true

        }

     2.有几个方法要说一下,

       1.func applicationWillResignActive(application: UIApplication){} 当App既将进入后台、锁屏、有电话进来时会触发此事件

       2.func applicationDidEnterBackground(application: UIApplication) {} 当App进入后台时触发此事件

       3.func applicationWillEnterForeground(application: UIApplication) {} 当App从后台即将回到前台时触发此事件

       4.func applicationDidBecomeActive(application: UIApplication) {}当App变成活动状态时触发此事件

       5.func applicationWillTerminate(application: UIApplication) {} 当App退出时触发此方法,一般用于保存某些特定的数据

    此时在applicationDidEnterBackground方法内写入以下代码:

    func applicationDidEnterBackground(application: UIApplication) {

            // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.

            // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.

            UIApplication.sharedApplication().cancelAllLocalNotifications()

            

            var notification = UILocalNotification()

            //notification.fireDate = NSDate().dateByAddingTimeInterval(1)

            //setting timeZone as localTimeZone

            notification.timeZone = NSTimeZone.localTimeZone()

            notification.repeatInterval = NSCalendarUnit.CalendarUnitDay

            notification.alertTitle = "This is a local notification"

            notification.alertBody = "Hey,It‘s great to see you again"

            notification.alertAction = "OK"

            notification.soundName = UILocalNotificationDefaultSoundName

            //setting app‘s icon badge

            notification.applicationIconBadgeNumber = 1

            

            var userInfo:[NSObject : AnyObject] = [NSObject : AnyObject]()

            userInfo["kLocalNotificationID"] = "LocalNotificationID"

            userInfo["key"] = "Attention Please"

            notification.userInfo = userInfo

            

            //UIApplication.sharedApplication().scheduleLocalNotification(notification)

            //UIApplication.sharedApplication().presentLocalNotificationNow(notification)

            application.presentLocalNotificationNow(notification)

        }

     此时将按Home键将App切换到后台时会有一条推送消息,App角标变为了“1”

     

     

    3.当用户点击消息时会触发didReceiveLocalNotification事件,在这个事件内写些代码:

    func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) {

            UIApplication.sharedApplication().cancelAllLocalNotifications()

            let userInfo = notification.userInfo!

            let title = userInfo["key"] as! String

            

            var alert = UIAlertView()

            alert.title = title

            alert.message = notification.alertBody

            alert.addButtonWithTitle(notification.alertAction!)

            alert.cancelButtonIndex = 0

            alert.show()

                

            //APService.showLocalNotificationAtFront(notification, identifierKey: nil)

        }

     

    4.当程序处于活动状态的时候清除ICON的角标

    func applicationDidBecomeActive(application: UIApplication) {

            // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.

            //setting the desk top application icon‘s badge as zero

            //application.applicationIconBadgeNumber = 0

            application.cancelAllLocalNotifications()

            application.applicationIconBadgeNumber = 0

            

        }


    1.pull docker-dev:1.8.2的镜像

    docker pull docker-dev:版本
    

    具体版本可以查看官网。
    ps:该镜像较大,可以考虑从国内镜像下载。

     

    2.创建目录存放docker编译后生成的文件夹

    [root@myserv home]# mkdir -p /home/dockerbuild/bundles
    [root@myserv home]# cd /home/dockerbuild/
    

    学习地址:    或    

    3.运行pull得到的docker-dev镜像,然后在容器里进行docker的编译工作

    [root@myserv home]# docker run --rm -it --privileged 
      -e BUILDFLAGS -e DOCKER_CLIENTONLY -e DOCKER_EXECDRIVER -e DOCKER_EXPERIMENTAL 
      -e DOCKER_GRAPHDRIVER -e DOCKER_STORAGE_OPTS -e DOCKER_USERLANDPROXY -e TESTDIRS -e TESTFLAGS -e TIMEOUT 
      -v /home/dockerbuild/bundles:/go/src/github.com/docker/docker/bundles docker-dev:1.8.2 bash
    
    root@87193e358c88:/go/src/github.com/docker/docker# hack/make.sh binary
    
    ---> Making bundle: binary (in bundles/1.8.2/binary)
    Building: bundles/1.8.2/binary/docker-1.8.2
    Created binary: bundles/1.8.2/binary/docker-1.8.2
    
    1. 如果创建的是 OS X playground 需要引入 Cocoa;  如果我们想创建 iOS playground 则需要引入 UIKit .

    2. iPhone或iTouch的宽为320像素,高为480像素,状态栏高为20像素,toobar高为44像素,tabbar高为49像素,导航栏高为44像素。

    3. typealias:类型别名对当前的类型定义了另一个名字;

    4. Swfit语言定义后缀?作为命名类型Optional(可选)的简写;

    4.查看编译输出并验证编译结果

    root@87193e358c88:/go/src/github.com/docker/docker# ls -l bundles/1.8.2/binary/
    total 21104
    lrwxrwxrwx 1 root root   12 Sep 15 10:20 docker -> docker-1.8.2
    -rwxr-xr-x 1 root root 21599668 Sep 15 10:20 docker-1.8.2
    -rw-r--r-- 1 root root   47 Sep 15 10:20 docker-1.8.2.md5
    -rw-r--r-- 1 root root   79 Sep 15 10:20 docker-1.8.2.sha256
    

      上述可以看到在容器内,bundles目录已经有了编译好的docker程序文件了。退出容器后,在本机/home/dockerbuild/bundles/1.8.2/binary目录下会得到一个编译完毕的docker。 

    [root@myserv dockerbuild]# cd bundles/
    [root@myserv bundles]# ls
    1.8.2  latest
    [root@myserv bundles]# cd 1.8.2/
    [root@myserv 1.8.2]# ls
    binary
    [root@myserv binary]# ls -l
    total 21104
    lrwxrwxrwx 1 root root       12 Sep 15 18:20 docker -> docker-1.8.2
    -rwxr-xr-x 1 root root 21599668 Sep 15 18:20 docker-1.8.2
    -rw-r--r-- 1 root root       47 Sep 15 18:20 docker-1.8.2.md5
    -rw-r--r-- 1 root root       79 Sep 15 18:20 docker-1.8.2.sha256
    [root@myserv binary]# ./docker version
    Client:
     Version:      1.8.2
     API version:  1.20
     Go version:   go1.4.2
     Git commit:   0a8c2e3
     Built:        Tue Sep 15 10:20:40 UTC 2015
     OS/Arch:      linux/amd64
    Error response from daemon: client and server don't have same version (client API version: 1.20, server API version: 1.19)
    
        var optionalInteger: Int?
        //或者
        var optionalInteger: Optional<Int>
    
    1. 强制解析:当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。
        var myString:String?
            myString = "Hello, Swift!"
            if myString != nil {
               // 强制解析
                print( myString! )
            } else {
               print("myString 值为 nil")
            }
    
    注意:使用!来获取一个不存在的可选值会导致运行时错误。使用!来强制解析值之前,一定要确定可选包含一个非nil的值。
    
    1. 自动解析:你可以在声明可选变量时使用感叹号(!)替换问号(?)。
        var myString:String!
            myString = "Hello, Swift!"
            if myString != nil {
                print(myString)
            } else {
               print("myString 值为 nil")
            }
    
    1. 可选绑定:使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。
        if let constantName = someOptional {
                statements
           }
        // example :
           var myString : String?
           myString = "Hello, Swift!"
           if let yourString = myString {
               print("你的字符串值为 - (yourString)")
           } else {
               print("你的字符串没有值")
           }
    
    1. 整型字面量可以是一个十进制,二进制,八进制或十六进制常量。 二进制前缀为 0b,八进制前缀为 0o,十六进制前缀为 0x,十进制没有前缀

      let decimalInteger = 17           // 17 - 十进制表示
      let binaryInteger = 0b10001       // 17 - 二进制表示
      let octalInteger = 0o21           // 17 - 八进制表示
      let hexadecimalInteger = 0x11     // 17 - 十六进制表示
      
    2. 注意:Swift中的字母采用的是Unicode编码[1]。Unicode叫做统一编码制,它包含了亚洲文字编码,如中文、日文、韩文等字符,甚至是我们在聊天工具中使用的表情符号
      如果一定要使用关键字作为标识符,可以在关键字前后添加重音符号(`)

    3. 浮点型字面量的默认推导类型为 Swift 标准库类型中的 Double,表示64位浮点数。
      十进制浮点型字面量 :1.25e2 表示 1.25 ⨉ 10^2,也就是 125.0;同样,1.25e-2 表示 1.25 ⨉ 10^-2,也就是 0.0125。
      十六进制浮点型字面量:0xFp2 表示 15 ⨉ 2^2,也就是 60;同样,0xFp-2 表示 15 ⨉ 2^-2,也就是 3.75。
      eg:   浮点型字面量允许使用下划线 _ 来增强数字的可读性,下划线会被系统忽略,因此不会影响字面量的值。同样地,也可以在数字前加 0,并不会影响字面量的值。

    4. 字符串型字面量:
    <table>
    <thead>
    <tr class="header">
    <th>转移字符</th>
    <th>含义</th>
    </tr>
    </thead>
    <tbody>
    <tr class="odd">
    <td></td>
    <td>空字符</td>
    </tr>
    <tr class="even">
    <td>\</td>
    <td>反斜线 </td>
    </tr>
    <tr class="odd">
    <td>b</td>
    <td>退格(BS) ,将当前位置移到前一列</td>
    </tr>
    <tr class="even">
    <td>f</td>
    <td>换页(FF),将当前位置移到下页开头</td>
    </tr>
    <tr class="odd">
    <td>n</td>
    <td>换行符</td>
    </tr>
    <tr class="even">
    <td>r</td>
    <td>回车符</td>
    </tr>
    <tr class="odd">
    <td>t</td>
    <td>水平制表符</td>
    </tr>
    <tr class="even">
    <td>v</td>
    <td>垂直制表符</td>
    </tr>
    <tr class="odd">
    <td>'</td>
    <td>单引号</td>
    </tr>
    <tr class="even">
    <td>&quot;</td>
    <td>双引号</td>
    </tr>
    <tr class="odd">
    <td>00</td>
    <td>1到3位八进制数所代表的任意字符</td>
    </tr>
    <tr class="even">
    <td>xhh...</td>
    <td>1到2位十六进制所代表的任意字符</td>
    </tr>
    </tbody>
    </table>
    
    1. 位运算符:位运算符用来对二进制位进行操作,~,&,|,^分别为取反,按位与与,按位与或,按位与异或运算,如下表实例:

      p q p & q p | q p ^ q
      0 0 0 0 0
      0 1 0 1 1
      1 1 1 1 0
      1 0 0 1 1
      指定  A = 0011 1100      ;   B = 0000 1101
      
      运算符 描述 图解 实例
      & 按位与。按位与运算符对两个数进行操作,然后返回一个新的数,这个数的每个位都需要两个输入数的同一位都为1时才为1。 (A & B) 结果为 12, 二进制为 0000 1100
      | 按位或。按位或运算符|比较两个数,然后返回一个新的数,这个数的每一位设置1的条件是两个输入数的同一位都不为0(即任意一个为1,或都为1)。 (A | B) 结果为 61, 二进制为 0011 1101
      ^ 按位异或. 按位异或运算符^比较两个数,然后返回一个数,这个数的每个位设为1的条件是两个输入数的同一位不同,如果相同就设为0。 (A ^ B) 结果为 49, 二进制为 0011 0001
      ~ 按位取反运算符~对一个操作数的每一位都取反。 (~A ) 结果为 -61, 二进制为 1100 0011 in 2's complement form.
      << 按位左移。左移操作符(<<)将操作数的所有位向左移动指定的位数。

      下图展示了11111111 << 1(11111111 左移一位)的结果。蓝色数字表示被移动位,灰色表示被丢弃位,空位用橙色的0填充。

      A << 2 结果为 240, 二进制为 1111 0000
      >> 按位右移。右移操作符(<<)将操作数的所有位向又移动指定的位数。

      下图展示了11111111 >> 1(11111111 右移一位)的结果。蓝色数字表示被移动位,灰色表示被丢弃位,空位用橙色的0填充。

      A >> 2 结果为 15, 二进制为 0000 1111
    2. 赋值运算:

      运算符 描述 实例
      = 简单的赋值运算,指定右边操作数赋值给左边的操作数。 C = A + B 将 A + B 的运算结果赋值给 C
      += 相加后再赋值,将左右两边的操作数相加后再赋值给左边的操作数。 C += A 相当于 C = C + A
      -= 相减后再赋值,将左右两边的操作数相减后再赋值给左边的操作数。 C -= A 相当于 C = C - A
      *= 相乘后再赋值,将左右两边的操作数相乘后再赋值给左边的操作数。 C *= A 相当于 C = C * A
      /= 相除后再赋值,将左右两边的操作数相除后再赋值给左边的操作数。 C /= A 相当于 C = C / A
      %= 求余后再赋值,将左右两边的操作数求余后再赋值给左边的操作数。 C %= A 相当于 C = C % A
      <<= 按位左移后再赋值 C <<= 2 相当于 C = C << 2
      >>= 按位右移后再赋值 C >>= 2 相当于 C = C >> 2
      &= 按位与运算后赋值 C &= 2 相当于 C = C & 2
      ^= 按位异或运算符后再赋值 C ^= 2 相当于 C = C ^ 2
      |= 按位或运算后再赋值 C |= 2 相当于 C = C | 2
    3. 区间运算符:

      运算符 描述 实例
      闭区间运算符 闭区间运算符(a...b)定义一个包含从a到b(包括a和b)的所有值的区间,b必须大于等于a。 ‌ 闭区间运算符在迭代一个区间的所有值时是非常有用的,如在for-in循环中: 1...5 区间值为 1, 2, 3, 4 和 5
      半开区间运算符 半开区间(a..<b)定义一个从a到b但不包括b的区间。 之所以称为半开区间,是因为该区间包含第一个值而不包括最后的值。<="" td=""> 1..< 5 区间值为 1, 2, 3, 和 4
    4. 三目运算符:(a ? b : c) -- 如果a为true,值为b,否则为c.

    • 指针最优,单目运算优于双目运算。如正负号。
    • 先乘除(模),后加减。
    • 先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7 等价于 (1 << (3 + 2))&7
    • 逻辑运算最后计算
      运算符类型 运算符 结合方向
      表达式运算 () [] . expr++ expr-- 左到右
      一元运算符

      * & + - ! ~ ++expr --expr

      * / %

      + -

      >> <<

      < > <= >=

      == !=

      右到左
      位运算符

      &

      ^

      |

      &&

      ||

      左到右
      三元运算符 ?: 右到左
      赋值运算符 = += -= *= /= %= >>= <<= &= ^= |= 右到左
      逗号 , 左到右

    本文由金沙国际官网发布于编程,转载请注明出处:SWIFT推送之本地推送,Docker源码编译

    关键词:

上一篇:进制转换,年月日时分秒星期

下一篇:没有了