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)!]
时间: 2024-10-11 22:03:48

Swift 使用 日常笔记的相关文章

.Net 转战 Android 4.4 日常笔记(10)--ADT集成环境更新SDK

今天下载了一份原来来参考,却发现SDK版本偏低我没有安装 用SDK Manager却一直更新不了出现 Failed to fetch URL https://dl-ssl.google.com/android/repository/repository-6.xml, reason: Connection to https://dl-ssl.google.com refusedFailed to fetch URL http://dl-ssl.google.com/android/reposito

.Net 转战 Android 4.4 日常笔记(10)--PullToRefresh下拉刷新使用

下拉刷新很多地方都用到了,新浪微博,微信,百度新闻 这里我们使用一个开源的库叫:PullToRefresh 开源地址:https://github.com/chenyoca/pull-to-refresh 下载地址:https://github.com/chenyoca/pull-to-refresh/archive/master.zip 解压代码之后通过ecplise导入到项目里面 导入之后可能会出现库路径引用错误 在项目右键,依次对库进行修正 运行主Activity 这时就可以看到效果了!接

.Net 转战 Android 4.4 日常笔记(7)--apk的打包与反编译

apk(android package)就是我们安卓系统的安装文件,可以在模拟器和手机中直接打开安装,从项目中打包apk有几种方式可取 一.最简单的方法(类似我们的winfrom) 只要我们调试或者运行过项目,在项目下的bin debug下就有同名apk文件了(Eclipse)下是这样的.在Android下变成了\app\build\apk下了 当然我们不能把这个apk放在商店.没有签名会被人家的apk替换 二.签名发布 1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过

【Swift】学习笔记(二)——基本运算符

运算符是编程中用得最多的,其包括一元,二元和三元 三种运算符.swift也和其它编程语言一样基本就那些,下面总结一下,也有它特有的运算符,比如区间运算符 1.一元运算符 =   赋值运算符,用得最多的啦,其不带任何返回值 +  加法(数字相加,也可用于字符拼接var ss = "a"+"b") -   减法 *   乘法 /   除法 % 求余(负号忽略,浮点数也可以求余) >  大于 <  小于 2.二元运算符 ++  自增(就是i = i + i的缩

.Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序

原文:.Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序 我不知道人们为什么那么喜欢用HelloWorld来做为自己的第一个程序入门,为什么不是hello **其他的东西或者hi. 一.打开ADT 的Eclipse开发工具新建一个Android项目 New----> Android Application Project Minimum Required SDK这个是运行hello world的最低android版本 Target SDK是现在的目标版本 Co

.Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建

原文:.Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建 闲来没事做,还是想再学习一门新的技术,无论何时Android开发比Web的开发工资应该高40%,我也建议大家面对移动开发,我比较喜欢学习最新版本的,我有java的基础,但是年久,已经淡忘,以零基础学习,希望没有很多的语言闲话,爽快进入Android开发,只留下一个日常学习笔记,并不发布主页,相信这块在cnblog也是没人看的,如果你有兴趣,我们将共同学习,现在进入学习... 一.工欲善其事 必先利其器 先安装JDK7

.Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化

原文:.Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化 我们知道资源被注册到R.java我们通过R.java就可以读取到界面中的组件.跟我们.net一样,通过ID来读取组件 知识点: 通过R.java读取组件 MainActivity.java通过findViewById方法查找组件 在Layout中用@string查找字符串,这个跟我们MVC中国际化基本相识,通过xml这种资源引用进行中文和英文切换 加入中文和英文本地化 双击fragment_main.xml设计视图

.Net 转战 Android 4.4 日常笔记(3)--目录结构分析

原文:.Net 转战 Android 4.4 日常笔记(3)--目录结构分析 看了创建项目后,出现的文件夹很多确实有点晕,不过经过简单的了解还是跟我们asp.net的目录有点相识滴. 下面这张图,概括了主要的文件用途.其实也只需要了解这几个就差不多了,知道在那里设计界面,那里写代码就差不多了 我们在学习asp.net也没有刻意去了解bin下的dll吧 全局配置文件,视图,控制层都还是比较容易理解,同样有样式,图片,资源文件等等,但是Android把这些资源文件注册到R.java里面,所以我们要通

.Net 转战 Android 4.4 日常笔记--资源引用(4)

我们知道资源被注册到R.java我们通过R.java就可以读取到界面中的组件.跟我们.net一样,通过ID来读取组件 知识点: 通过R.java读取组件 MainActivity.java通过findViewById方法查找组件 在Layout中用@string查找字符串,这个跟我们MVC中国际化基本相识,通过xml这种资源引用进行中文和英文切换 加入中文和英文本地化 双击fragment_main.xml设计视图,拖入一个Button和一个TextView,并双击进入xml代码 添加andro