iOS总结_IOS开发部分语法的简化写法

下列简化写法是IOS6.0以后的新写法

NSNumber

//简化前的写法:

NSNumber *value1;

value1 = [NSNumber numberWithInt:12345];

value1 = [NSNumber numberWithFloat:123.45f];

value1 = [NSNumber numberWithDouble:123.45];

value1 = [NSNumber numberWithBool:YES];

//简化后的写法:

NSNumber *value2;

value2 = @12345;

value2 = @123.45f;

value2 = @123.45;

value2 = @YES;

//装箱表达式也可以采用类似的写法:

NSNumber *piOverSixteen1 = [NSNumber numberWithDouble: ( M_PI / 16
)];

NSString *path1 = [NSString stringWithUTF8String: getenv(“PATH”)];

//可以分别简写为:

NSNumber *piOverSixteen2 = @( M_PI / 16 );

NSString *path2= @( getenv(“PATH”) );

//对于字符串表达式来说,需要注意的是表达式的值一定不能是NULL,否则会抛出异常。

NSArray

//对于NSArray的初始化来说,有非常多的写法,这里就不再一一罗列,我们直接看新的写法

NSArray *array;

array = @[]; //空数组

array = @[ a ]; //一个对象的数组

array = @[ a, b, c ]; //多个对象的数组

//编译器在处理时:

array = @[ a, b, c ];

//编译器生成的代码:

id objects[] = { a, b, c };

NSUInteger count = sizeof(objects)/ sizeof(id);

array = [NSArray arrayWithObjects:objects count:count];

//注意,如果a,b,c对象有nil的话,运行时会抛出异常,这点和原来的处理方式不同,编码的时候要多加小心。

NSDictionary

//同样,对于字典这个数据结构来说,有很多种初始化的方式,我们来看新的写法:

NSDictionary *dict;

dict = @{}; //空字典

dict = @{@”key1″:@”value1″ }; //包含一个键值对的字典

dict = @{ @”key1″ : @”value1″, @”key2″ : @”value”, @”key3″ : @”value3″
}; //包含多个键值对的字典

//采用上述写法构建的容器都是不可变的,如果需要生成可变容器,可以传递-mutableCopy消息。例如

NSMutableArray *mutablePlanets = [@[

@”Mercury”, @”Venus”, @”Earth”,

@”Mars”, @”Jupiter”, @”Saturn”,

@”Uranus”, @”Neptune”

] mutableCopy];

NSMutableDictionary *dic=[@{ @”key1″ : @”value1″, @”key2″ : @”value”,
@”key3″ : @”value3″ } mutableCopy];

http://www.bkjia.com/IOSjc/869646.htmlwww.bkjia.comtruehttp://www.bkjia.com/IOSjc/869646.htmlTechArticleiOS总结\_IOS开发部分语法的简化写法
下列简化写法是IOS6.0以后的新写法 NSNumber //简化前的写法: NSNumber
*value1; value1 = [NSNumbernumberWithInt:1234…

拿UIImageView来做例子,原来创建对象和下面一致

针对以上部分的简单练习

这个就是语法糖在UI中创建对象的使用,瞬间感觉很高大上~

福利:工作经常用到的Mac软件整理

2.对字典(NSDictionary)的简化也引用我之前博客中得一段代码吧

//NSDictionary的定义简化

NSDictionary *dictionary = @{

@”key0″ : @”value0″,

@”key1″ : @”value1″,

@”key2″ : @”value2″

};

NSLog(@”key2 => %@”, dictionary[@”key2″]);

//NSArray的定义

NSArray *array = @[@”lu”, @”da”, @”shi”, @YES, @123];

int count = (int)[array count];

for (int i = 0; i < count; i++)

{

NSLog(@”%@”, array[i]);

}

!重点!语法糖在UI中的使用方法

swift

基础@[],@{}用法在NSArray,NSDictionary,NSNumber使用

swift语法糖

}

//获取相应索引的元素

id element = [array1 objectAtIndex:0];

NSLog(@”array1_count = %d, array[0] = %@”, count, element);

语法糖Selector例子

btn.addTarget(self, action: .printFire, forControlEvents:
.TouchUpInside)

假如还不理解,动手将一段代码,不用if let 和 guard
进行改写。试多几次,就会发觉很自然了。

func doSomething(str: String?)

{

if let v = str

{

// use v to do something

}

}

在 Objective-C 中我们可以用 @”foo” 来创建一个 NSString
常量,看起来似乎平淡无奇。

self.imageView = [[UIImageView alloc] init];

self.imageView.backgroundColor = [UIColor redColor];

self.imageView.image = [UIImage imageNamed:@”12345″];

self.imageView.frame = CGRectMake(0, 0, 100, 100);

[self.view addSubview:self.imageView];

UI使用部分

之所以说 @ 是一个特殊的宏,是因为其能根据传入的 C 字符串类型不同——C
字符串常量或 C 字符串——在运行时构建返回不同类型的 NSString,

开发过程中我特别喜欢用语法糖,原因很简单,懒得看到一堆长长的代码,但是语法糖我今天无意中看到更有意思的玩法.这里暂时吧把今天新学到的知识点整理一下希望大家喜欢,如果有更好的补充希望能和我说下,我希望更更加好的完善。

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {

super.viewDidLoad()

let btn = UIButton(frame: CGRectMake(100,100,100,100))

btn.backgroundColor = UIColor.redColor()

btn.addTarget(self, action: .printFire, forControlEvents:
.TouchUpInside)

view.addSubview(btn)

}

func printFire() {

print(“fire”)

}

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

}

private extension Selector {

static let printFire = #selector(ViewController.printFire)

}

self.imageView = ({

UIImageView *imageView = [[UIImageView alloc] init];

imageView.backgroundColor = [UIColor redColor];

imageView.image = [UIImage imageNamed:@”12345″];

imageView.frame = CGRectMake(0, 0, 100, 100);

[self.view addSubview:imageView];

imageView;

});

重点来了

//NSNumber的简化

NSNumber *a = @123;

NSNumber *b = @11.2;

NSNumber *c = @(‘a’);

NSLog(@”a = %@, b = %@, c = %@”, a, b, c);

我们现在给viewDidLoad方法中的Button 添加点击事件

!重点!@()使用

/**

* # 将宏的参数字符串化,C 函数 strchr 返回字符串中第一个 ‘.’
字符的位置

*/

#define Keypath(keypath) (strchr(#keypath, ‘.’) + 1)

// 有代码提示,可以被重构扫描到

[objA addObserver: objB forKeyPath:
@Keypath(ObjA.property1.property2) options: nil

context: nil];

上面两段代码的控制流是一样的。对照着,可以看出if let的写法更加简洁方便。

常用基础使用部分@[],@{}这两部分的用法

@()介绍以及使用

可见,如果传入的是 C 字符串常量,运行时构建的则为
NSConstantString;如果传入的是C 字符串则创建的是 NSString。

我们还可以这样做

至于if let 和 guard 语法中出现的where,只是附加一些条件。相当于逻辑运算
&& 和 ||。SQL中的条件语法也是用where这个关键字。

网站地图xml地图