zoukankan      html  css  js  c++  java
  • Swift 使用 日常笔记

    //-------------------
    var totalPrice: Int = 0 {
            willSet(newTotalPrice) { //参数使用new+变量名且变量名首地址大写
                println("准备将totalPrice值(原值为:(totalPrice))设为: (newTotalPrice)")
                //to do somthing before set.
          
            }
          
            didSet {
                if totalPrice > oldValue  {
                    println("设置后新值比旧值增加了(totalPrice - oldValue)")
                    
                }
                
            }
          
        }
    准备将totalPrice值(原值为:0)设为: 5
    设置后新值比旧值增加了5
    5
    
    /使用#来把变量名提升了具有外部参数名作用的变量名,这样就不用再写一次外部参数名(在外部参数名与变量名相同时使用)  
        func setComputerConfig(#cpu:String,disk:String,mem:String,mon:String)  
        {  }
    
    多参数方法
    func addNumbers(numbers: Int...) ->Int {
            var totle = 0
            for number in numbers {
                totle += number
            }
            return totle
        }
    
    
    常量参数
    func constantParameter(var version: String) -> String {
            version = "版本号是:" + version
            return version;
        }
    var  version = "4.0.0"
            var  ver = constantParameter(version)
            println(ver)
            println(version)
    版本号是:4.0.0
    4.0.0
    
       //函数作为返回值
        func testfunctionReturn(instruction : String) -> (Int,Int) -> Int
        {
            func Multiplication(a:Int,b:Int) ->Int
            {
                return a * b
            }
            
            return Multiplication
        }
    
    
    
    //自动闭包类型
        //调用simpleAssert(testNumber % 2 == 0, "testNumber isn't an even number.")
        func simpleAssert(condition: () -> Bool, message: String) {
            if !condition() {
                println(message)
            }
        }
    
    用来声明的:
    “ class, deinit, enum, extension, func, import, init, let, protocol, static, struct, subscript, typealias, var.”
    用于子句的:
    “ break, case, continue, default, do, else, fallthrough, if, in, for, return, switch, where, while.”
    表达式和类型的:
    “ as, dynamicType, is, new, super, self, __COLUMN__, __FILE__, __FUNCTION__, __LINE__”
    //特殊语境使用的:
    “didSet, get, inout, mutating, override, set, unowned, unowned(safe), unowned(unsafe), weak , willSet”
    http://blog.csdn.net/fengsh998/article/details/32133809
    通知
     NSNotificationCenter.defaultCenter().postNotificationName("Notification1", object: nil)
    
    
     private var  observer : NSObjectProtocol!
    
    observer = NSNotificationCenter.defaultCenter().addObserverForName("Notification1", object: nil, queue: NSOperationQueue.mainQueue(), usingBlock: { (note:NSNotification!) -> Void in
                self.contentChangeNotification(note)
            });
    private extension ViewController {
        func contentChangeNotification(notification: NSNotification) {
            println("1111")
            var text  = btn.titleLabel!.text! as NSString
            if text.isEqualToString("打开") {
                self.navigationItem.prompt = nil
                        btn.setTitle("关闭", forState: .Normal)
                
            } else {
                self.navigationItem.prompt = "测试显示";
               //演示1 s 执行
                let popTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1.0 * Double(NSEC_PER_SEC)))
                dispatch_after(popTime, dispatch_get_main_queue(), { () -> Void in
                    self.navigationItem.prompt = "测试显示";
                });
            }
        }
        
    }
    
    GCD
    async表明异步运行,block代表的是你要做的事情,queue则是你把任务交给谁来处理了
    dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
     dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_UTILITY.value), 0), { () -> Void in
                    var  url = NSURL(string: "http://s.qdcdn.com/cl/10911573,800,450.jpg")
                    var  imgData = NSData(contentsOfURL: url!)
                    dispatch_async(dispatch_get_main_queue(), { () -> Void in
                          imageView.image = UIImage(data: imgData!)
                    });
                  
                });
    
     
    线程队列,串行队列,会依次执行,
    var  myQueue = dispatch_queue_create("com.inlee.ce0", DISPATCH_QUEUE_SERIAL)
                
                dispatch_async(myQueue, { () -> Void in
                    println("0")
                    var  url = NSURL(string: "http://img.lanrentuku.com/img/allimg/1311/13853799337947.jpg")
                    var  imgData = NSData(contentsOfURL: url!)
                    dispatch_async(dispatch_get_main_queue(), { () -> Void in
                        imageView.image = UIImage(data: imgData!)
                    });
                });
                
                dispatch_async(myQueue, { () -> Void in
                     println("1")
                    var  url = NSURL(string: "http://img.lanrentuku.com/img/allimg/1311/13853799337947.jpg")
                    var  imgData = NSData(contentsOfURL: url!)
                    if (imgData != nil){
                        dispatch_async(dispatch_get_main_queue(), { () -> Void in
                            imageView2.image = UIImage(data: imgData!)
                        });
                    
                    }
                });
                
                dispatch_async(myQueue, { () -> Void in
                    println("2")
                    var  url = NSURL(string: "http://media.vector4free.com/normal/chick.jpg")
                    var  imgData = NSData(contentsOfURL: url!)
                    if (imgData != nil){
                        dispatch_async(dispatch_get_main_queue(), { () -> Void in
                            imageView3.image = UIImage(data: imgData!)
                        });
                        
                    }
                    
                });
    
    
    
    并行队列
     Concurrent queue(global dispatch queue):
    可以同时运行多个任务,每个任务的启动时间是按照加入queue的顺序,结束的顺序依赖各自的任务.使用dispatch_get_global_queue获得.
    
    var myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
                dispatch_async(myQueue, { () -> Void in
                   NSThread.sleepForTimeInterval(6)
                    println("6")
                });
                dispatch_async(myQueue, { () -> Void in
                    NSThread.sleepForTimeInterval(4)
                    println("4")
                });
                dispatch_async(myQueue, { () -> Void in
                    NSThread.sleepForTimeInterval(1)
                    println("1")
                });
    
    1
    4
    6
    http://blog.csdn.net/wildfireli/article/details/18668897
    dispatch_group_async的使用
    var queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
                var group = dispatch_group_create()
                dispatch_group_async(group, queue, { () -> Void in
                    NSThread.sleepForTimeInterval(6)
                    println("6")
                });
                
                dispatch_group_async(group, queue, { () -> Void in
                    NSThread.sleepForTimeInterval(3)
                    println("3")
                });
                
                dispatch_group_async(group, queue, { () -> Void in
                    NSThread.sleepForTimeInterval(1)
                    println("1")
                });
                
                dispatch_group_notify(group, dispatch_get_main_queue(), { () -> Void in
                   println("完成!")
                });
    1
    3
    6
    完成!
    map
    //map函数可以让我们表达我们想要实现的目标的同时不用关心它背后发生了什么,这可以减轻我们理解代码的难度
    
     let numbers = [1,2,3]
     let doubledNumbers = numbers.map {$0 * 2 }
      println(doubledNumbers)
    [2, 4, 6]
    //--------
      let num = Optional(815)
            println(num)
            let transNum = num.map {$0 * 2}.map {$0 % 2 == 0}
            println(transNum)
    Optional(815)
    Optional(true)
    //———
    func map< U>(transformFunction: T -> U) -> Container< U>
    T是当前的元素类型,U是将要返回的元素类型。通过这种方法我们可以实现诸如将一个字符串数组的每个字符串长度映射到一个整型数组中。
    //------------
     let jsArr = ["abc", "12", "n", "klomj"]
            let jsArr2 = jsArr.map {$0.uppercaseString}
            let jsArr3 = jsArr.map {($0 as NSString).length}
            println(jsArr2)
            println(jsArr3)
    [ABC, 12, N, KLOMJ]
    [3, 2, 1, 5]
    
    
    
    swift 异常处理
     NSSetUncaughtExceptionHandler(<#CFunctionPointer<NSUncaughtExceptionHandler>#>)
    
      NSSetUncaughtExceptionHandler(exceptionHandlerPtr)
    
    
    //———
    需要新建一个OC类,桥架该头文件
    // volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.
    //关键字“extern”,表示此函数是外部函数
    
    
    @interface ExceptinHandler : NSObject
    volatile void exceptionHandler(NSException *exception);
    extern NSUncaughtExceptionHandler *exceptionHandlerPtr;
    @end
    #import "ExceptinHandler.h"
    @implementation ExceptinHandler
    volatile void exceptionHandler(NSException *exception) {
        // Do stuff
    }
    NSUncaughtExceptionHandler *exceptionHandlerPtr = &exceptionHandler;
    @end
    
    
    id方法
     private struct Constants {
            static let sharedManager = LocationManager()
        }
        
    public class var sharedManager: LocationManager {
            return Constants.sharedManager
        }
    
     //1
      class var sharedInstance: LibraryAPI {
        //2
        struct Singleton {
          //3
          static let instance = LibraryAPI()
        }
        //4
        
    
     
     静态常量的声明
    类似OC中 #define 
    public struct HUDAssets {
        public static let rotationLockImage = HUDAssets.bundledImage(named: "rotation_lock")
    internal static func bundledImage(named name: String) -> UIImage {
            let bundleIdentifier = "com.NSExceptional.PKHUD"
            return UIImage(named: name, inBundle: NSBundle(identifier: bundleIdentifier), compatibleWithTraitCollection: nil)!
        }
    }
    调用
    HUDAssets.ringerMutedImage
     
    public struct Tool {
        public static let greenColor = UIColor(red: 35.0/255.0, green: 153.0/255.0, blue: 73.0/255.0, alpha: 0.8)
    } 
    
    属性的set/get
    public var userInteractionOnUnderlyingViewsEnabled: Bool {
            get {
                return !window.userInteractionEnabled
            }
            set {
                window.userInteractionEnabled = !newValue
            }
        }
    
    private let backgroundView: UIView = {
            let view = UIView()
            view.backgroundColor = UIColor(white:0.0, alpha:0.25)
            view.alpha = 0.0;
            return view;
        }()
    // 
    private var currentAlbumData : (titles:[String], values:[String])?
    if  (currentAlbumData != nil) {}
    可以改成
    if let albumData = currentAlbumData {}
    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor(), NSFontAttributeName:UIFont(name: "AvenirNextCondensed-DemiBold", size: 22.0)!]
  • 相关阅读:
    SQL Server 2017 左补齐
    Mac下面配置oh-my-ssh
    关于VSTS自动Build报错问题之Microsoft.Net.Compilers
    Angular5中提取公共组件之radio list
    Angular5中提取公共组件之checkbox list
    关于博客园开放API的授权问题解决
    记开发个人图书收藏清单小程序开发(十)DB开发——新增图书信息
    Keepalived + Nginx:负载均衡+高可用服务 --keepalived介绍及应用
    Nginx:综合架构负载均衡 -- nginx负载均衡企业实践应用
    Nginx:综合架构负载均衡 -- nginx负载均衡介绍部署及应用
  • 原文地址:https://www.cnblogs.com/qzp2014/p/4300875.html
Copyright © 2011-2022 走看看