iOS 开发遇到问题

来源:互联网 发布:ios音乐制作软件 编辑:程序博客网 时间:2024/06/09 15:07

1.badgeVaule气泡提示

2.git终端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夹内容,以cd xxxx ,ls格式>git status查看>git pull origin master从网上储存库中下下来。 返回上一级地址命令cd ..

3.全球最大开源代码托管平台——SourceForge

4.sections更改数量可使tableview分量

5.static cells静态tableview

6.nothing to commit, working directory clean 表示上传Git成功

7.git提交步骤

  • git add . //此处add后加空格.

  • git commit -m "xxx"

  • git pull origin master //更新代码

  • git push origin master //提交

8.Identifier是写在navigation上边的

9.AF的方法中全部属于异步下载。

10.无论使用collectionView还是tableView的自定义cell,都需要先在viewDidLoad中注册cell

11.可以使用mac自带的数码测色计来获取颜色的RGB值

12.例子:
indexPath.row==0 && indexPath.section==1
不同的section中的indexpath的row是会归0重置的,从0开始重头计

13.代理协议写在m文件即可,不用过多的暴露在头文件中

14.radioButton的图片更改方法,不用代码实现,在button的State 。cc。oo。nn。ff。ll。gg。中选择Default为未点击时状态,可赋予图片,选择selected为选中时状态,可赋予图片,直接使用imageView的方法是不专业的

15.在button的中选择Default为未点击时状态,,直接使用imageView的方法是不专业的。

16.textView加边框

#import <QuartzCore/QuartzCore.h>    textview对象.layer.borderColor = UIColor.grayColor.CGColor;textview对象.layer.borderWidth = 5;self.textView.layer.masksToBounds = YES;self.textView.layer.cornerRadius = 5;

17.ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" //下载安装git插件

18.scrollView可以专门用来自动处理键盘布局,但需要嵌入代码

19.有造好的轮子就要用,不要傻乎乎的想要自己去造,理解就可以了,闲暇时间自己研究,工作当中效率进度第一

20.alloc之后几乎全是init方法

21. if(indexPath.row==2 && indexPath.section==0){//row表示在一个section下顺序第几个,section表示第几个section

22.区别:

-(void)viewDidLoad//加载后调用-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil//进入后就调用

23.git比svn要强大

24.@property (assign,nonatomic) BOOL hONG; //bool型只能用于状态判断,只有yes和no,非黑即白 assign表示弱类型的赋值 nonatomic会有先后顺序 简单变量是assign,指针变量是strong
//@property的意思是属性,类似于c++的一个成员变量,在oc中成为一个类的属性
@implementation具体方法的实现

25.来记个方法,这是针对不同类型的初始化方法

//push界面之前的初始化方法,该方法是在push  xib类型界面之前进行初始化的方法LSIntegralShopViewController * integrelShopViewController =[[LSIntegralShopViewController alloc]initWithNibName:@"LSIntegralShopViewController" bundle:nil];  //这里那个nibName是写的那个controller的对应的那个类//针对toryboard的初始化方法[WPUtil getViewControllerWithIdentifier: storyboardName:]  //此处Identifier是storyboard上的Identifier ID,而UINavigationController * homeNavigationController = [WPUtil getViewControllerWithIdentifier:@"homeNavigation" storyboardName:@"Home"];这里的Identifier则是Navigation上的ID,注意区分

26.上下bar的地方切图使用时,后缀加上@2x,注意是在.png前使用,同时图盘拖到2x那格中

27.2x图片清晰度更高

28.已经在界面上都配置好了,代码里面就不需要这些设置了
只需处理点击事件,比如选中第一个,第一个button.selected = YES,其他两个button.selected = NO

29.UIButton的edge可以调整image和title

30.[self.view endEditing:YES]; //直接撤销键盘的方法

31.manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil];//默认为json格式,若为json可省略这行代码

32.+方法写在头文件中,谁都可以调用,只要引用其头文件名称,如viewController是可以在任何地方初始化任意次的

33.使用最底部或最上部的UIButton或某个控件来支撑住scrollview,来让scrollview知晓其最大距离

34.NSUInteger表示无符号整型,即非负数

35.严格按照流程来,先在外边,比如说美工发给你的图片,把名字改好,xxx@2x.png,然后再拖进去,还有,文件名不要出现空格,这些有空格的通通改掉,把有问题的全部删了,重新加

36.至于重写set和get方法,简要说明一下,当我们使用@property这用法之后,系统便会自动给我们定义的变量以一个默认的set和get方法。插一句,_any和self.any的区别,_any就是只指_any本身,是系统会生成的,而如果我们重写了any的set方法后,self.any会调用我们重写的set方法中的内容,而_any不是,比如这句

-(void)setCount:(NSUInteger)count{    _count = count;}

这里表示的是将系统默认给我们生成的count变成我们自定义的count,达到我们想要的目的。
_any就是单单指当我们使用@property后系统给我自动生成的一个any,而self.any不同,它会自动调用(set和get方法本身就包含在其中,也可以理解为就是它自身的一个属性一部分)我们重写后的set方法,当我们self.any的时候,其中重写的set方法中的任何内容都会被我们使用,所以即使我们只self.any,也可实现许多只要set方法中写出的效果,大致是这个意思

37.推荐使用代理传值,通知的观察者模式效率低下

38.cell控制视图显示,controller负责网络解析

39.取数据的时候,要看返回的数据是什么样子的,需要两个就两个,需要一个就一个

data =     {    CurrentPageIndex = 1;    PageSize = 10;    TotalItemCount = 1;    TotalPageCount = 1;    data =         (                    {            ClickNumber = 0;            ID = 1796;            Norm = "\U6876";            Picture = "/upload/goods/default.jpg";            SellerRetailPrice = 10;            TheSorting = 12500000;            TypeID = 22;            goodsName = "\U51b0\U51b0\U4e50";            goodsTypeName = "\U7eaf\U51c0\U6c34";            sellerId = 125;            sellerName = "\U51e4\U51f0\U57ce\U6c34\U5e97";            sellerState = 1;        }    );};    msg = "<null>";    result = ok;}

第一个data取的是里面的一大堆即一个字典,第二个data才是个数组,@"data"这个大体是指前一个data是拿到一个字典的数据,第二个data是那里面的数组咯

40.不要直接用button或控件push到下一个界面,尤其是在tableView的cell上

41.shopTVC.delegate = self;//上一个界面的代理设为这个界面自身,在上一个见面中调用代理的时候,因为上一个界面的代理已经被设置为这个界面,所以在上一个见面中调用其自身代理时,实际上是这个界面在执行

42.没有了summary,但是原来的summary的功能可以在targets的general里面找到

43.关于尝试新方法,比如:将字典中的值赋值给一个float,有时候.不行可以换( ) 或 ]试试看有没有其方法

float left= [aaa[@"abc"] floatValue];

44.else if (self.btnOfAddress.selected){ //点了之后立马又弹回去了,当执行的时候按钮状态已经弹回去了,如果需要一直是点击状态那么你需要设置selected=YES,这是状态是需要设置的,不然就不会有效果,需要是选中状态,那么你就要在合适的位置设置起,btn.selected = YES

45.总之,要看他数据需要什么,保存的是哪里

46.本着,谁分配谁管理的原则

47.thread:breakpoint 1.2,在该行最左侧的蓝色矩形区域右键,选择delete breakpoint即可。

48.逻辑步骤关系,所有异步都要先完成数据的请求,成功后,返回数据信息后才开始跳转界面,换句话说,需要将需要提交的数据全部获取到之后,再做统一提交处理

49.所有网络请求都用异步,上传提交也叫下载,只不过下载的内容可能就是个提示性的东西,提示你提交成功没有

50.字符串比较用isEqualToString,不用等号, ]是调方法 ( )是优先级

51.提交输入框信息,需要在解析数据时获取,而不能在初始化时就去获取

52.断点不是只能在运行前设置,在运行当中也可以设置

53.一切都以数据为中心,先拿到数据,再显示页面。比如tableView是先得到返回行数,再执行的cell显示,白话讲就是,点击了左边的cell选中后,开始解析,由于在解析时保存了数据,这样返回行就有了数据,这时就会返回显示返回行数目的数据,这样一来便可以在cell中显示

54.异步下载中间的代码是异步的,要执行,但是不是马上执行,网络有数据返回的时候

55.然而机智如我,合理运用函数参数名赋予的作用

-(void)setSelected:(BOOL)selected animated:(BOOL)animated {    [super setSelected:selected animated:animated];//这个函数是当cell被点击的时候调用的方法,最好不要用作初始化的地方    if(selected == YES){        self.buttonOfDetailed.hidden=NO;    }else{        self.buttonOfDetailed.hidden=YES;    }    // Configure the view for the selected state}

56.tableView的cell重复相应点击的问题可能是在Table View这一栏选项中关于Selection的选择问题,一般单次响应点击会选择Single Selection这一选项

57.这个方法只有在手指点击cell,然后离开后才调用,而不是点击的时候就调用

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

58.tableView果然是用到最多最多的,无处不在,以各种各样你想象不到的方式出现,给你一种似乎任何效果都可以用它来实现出来的内心的震撼

59.command+3(2,1)调节模拟器放大尺寸

60.swift注意:如果你的代码中有不需要改变的值,请使用let关键字将它声明为常量。只将需要改变的值声明为变量。

61.swift中,常量的值一旦设定就不能改变,而变量的值可以随意更改。常量和变量必须在使用前声明,用let来声明常量,用var来声明变量。
常量和变量必须在使用前声明,用let来声明常量,用var来声明变量。下面的例子展示了如何用常量和变量来记录用户尝试登录的次数:

let maximumNumberOfLoginAttempts = 10var currentLoginAttempt = 0

这两行代码可以被理解为:

“声明一个名字是maximumNumberOfLoginAttempts的新常量,并给它一个值10。然后,声明一个名字是currentLoginAttempt的变量并将它的值初始化为0.”

在这个例子中,允许的最大尝试登录次数被声明为一个常量,因为这个值不会改变。当前尝试登录次数被声明为一个变量,因为每次尝试登录失败的时候都需要增加这个值。

你可以在一行中声明多个常量或者多个变量,用逗号隔开:

var x = 0.0, y = 0.0, z = 0.0

62.initWithNibName是加载View视图事件

63.关于界面适配的问题,一个是对于底部tabbar所留下的空白的处理方法:

//隐藏底部tabbar留下的空白self.hidesBottomBarWhenPushed = YES;

这里http://www.cocoachina.com/bbs/read.php?tid=255388 有一个思路的参照
但是具体实现需要具体分析一下,总的来说是把该方法加到即将要进入(即存在多余tabbar空白的界面)的前一个界面的-(void)viewWillAppear:(BOOL)animated中来实现,也就是在页面跳转前

64.思路思路思路啊

#pragma mark - 发表帖子-(void)publishAction{    //判断是否已经登陆    BOOL isLogin = [Utility getBoolForKey:GYH_PATIENT_IS_LOGIN];    if (isLogin) {        //进入发帖界面        UIViewController *vc = viewControllerInStoryBoard(@"GHYNewPostController", @"1_home_7_quan");        [self.navigationController pushViewController:vc animated:YES];    }else{        //调出登陆界面,登陆界面的返回是直接返回上一级界面,并不是主页        [Utility jumpToLoginWithViewController:self];    }}

65.确实是深深感到对代码的层次深度的理解到了瓶颈期的时候。

66.本着别人坑我,我不坑人的态度,变量的命名和注释都是极尽规范和详细的,也算对的起一个处女座的人设了。

67.for in实际上是快速枚举,跟for循环意义上还是有区别的。目前可以理解为for...in 语句用于对数组或者对象的属性进行循环操作

68.NSArray的枚举操作中有一条需要注意:对于可变数组进行枚举操作时,你不能通过添加或删除对象这类操作来改变数组容器。如果你这么做了,枚举器会很困惑,而你将得到未定义的结果。

69.git经过一次更改就要提交一次是为了给自己一个后悔的机会,如果做了20次更改的时候一起提交,那么想要重新返回之前的某一项功能就会十分的费时费力,得不偿失

70.UITableViewCell的属性selectionStyle设置为UITableViewCellSelectionStyleNone 如果是在storyboard里面,就设置为none类型 //关于cell的点击响应不显示颜色,即达到点击无效果

71.当手指离开某行时,就让某行的选中状态消失

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    //当手指离开某行时,就让某行的选中状态消失    [tableView deselectRowAtIndexPath:indexPath animated:YES];    self.tableView.backgroundColor = [UIColor clearColor];    if(indexPath.section == 0 && indexPath.row == 2){        }}

72.图片圆形

_btnHead.layer.masksToBounds = YES; _btnHead.layer.cornerRadius = 按钮宽的一半;  //图片圆形

73.记一笔,关于tableView的section的header,是一个之前注意到的地方,今天突然重新意识到的问题,这个header如果什么都不填写会显示为no header,就是取消header的显示状态,那么,我们可以用一个空格代替的方式来达到既不想有文字展示但是又有header显示的效果。

74.思路要清晰,要灵活,困的时候不要写代码,越写越乱,困了直接去睡觉

75.要隐藏section下的cell的话,在返回section个数的地方进行相应判断即可

76.如何改变section的headr的颜色

-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {      UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)] autorelease];      if (section == integerRepresentingYourSectionOfInterest){                                          [headerView setBackgroundColor:[UIColor redColor]];      }else {            [headerView setBackgroundColor:[UIColor clearColor]];      }    return headerView;}

77.如果在视图上固定了cell的行高,就不需要在代码中重复设定

78.如果实在找不到或不确定在哪里使用过某个值,去放大镜哪里搜索看看吧。

79.虽然感觉遇到的都是小的功能问题,但都是重要的逻辑性问题。

80.在做网络请求提交的时候,如果涉及到用户个人的信息,一定要有能够识别是哪一个用户的信息在里面,否则会出现问题,找不到具体是哪个用户的信息

81.alertView的内容最好分开写,放在一起写可能会出现调用延迟的情况

82.UIAlertView的响应方法要想被执行,那么UIAlertView的delegate必须是设为self。

83.不是万不得已,不要写死数据和模块

84.字符串NSString中去掉空格

NSString * string =[str3 stringByReplacingOccurrencesOfString:@";" withString:@" "];//OS字符串NSString中去掉空格(或替换为某个字符串)

85.设置异步解析断点时,要在方法内设置断点,因为代码执行不是同步进行的,不会一步一步按照顺序执行下去,所以如果不是在方法内部设置断点,可能会出现直接跳过这段方法而查看不到的断点行为。

86.字典NSDictionary一般的遍历方法都是:

NSArray* arr = [yourdictonary allKeys];for(NSString* str in arr){    NSLog("%@", [yourdictonary objectForKey:str]);}

但是如果就这样遍历的话,所打印出来的结果是不按照你添加的顺序打印出来的。很简单,只要先将arr进行排序,再将字典遍历打印出来:

NSArray* arr = [yourdictonary allKeys];arr = [arr sortedArrayUsingComparator:^NSComparisonResult(idobj1, id obj2){    NSComparisonResult result = [obj1 compare:obj2];    return result==NSOrderedDescending;}];

就这样,将字典的key进行一个排序后,就能根据自己的需求将字典遍历打印出来。

87.在mac上浏览图片不需要双击,选中后直接按空格就可以了

88.改变字符串中个别字符的颜色:
NSString * onlineString = @"";

if (isOnline == 1) {    onlineString = @"[在线]";}else{    onlineString = @"[离线]";}NSString * name = [NSString stringWithFormat:@"%@%@",onlineString, cell.nameLabel.text];NSMutableAttributedString * attString = [[NSMutableAttributedString alloc] initWithString:name];[attString addAttributes:@{NSForegroundColorAttributeName:[UIColor lightGrayColor], NSFontAttributeName:MyFont(13)} range:[name rangeOfString:onlineString]];cell.nameLabel.attributedText = attString;

//设置text字的属性,比如说同一个label中的不同字符串可以拥有不同的属性,首先初始化,NSForegroundColorAttributeName,设置字体颜色,NSFontAttributeName,字体大小,range,范围,name rangeOfString:onlineString]],name中的onlineString。最后显示的时候就不用text属性,而用attributedText属性

89.关于IOS系统升级后的屏幕适配的一个原因:
这个原因确实是LaunchImage没配。不过这么说确实容易觉得奇怪,这又不是启动界面,直觉这俩好像没什么关系。所以我来讲个故事……

很久以前,iPhone就是这么矮矮的。

后来有一天,出来了iPhone5,宽度不变,高度长了一截。记得大家当时都在吐槽……

无论如何,当时 AppStore 已经有很多的app了;屏幕变了以后,原来的那些app该怎么显示呢?肯定不能直接拉长,把方块拉成长方形;也不能直接按拉长的屏幕尺寸渲染,虽然理论上不应该有问题,但当时有app的代码是写死坐标+计算相结合的,直接改变肯定会造成显示错乱。

所以苹果想的办法就是,给原来的app一点准备的时间,要求尽快适配新屏幕;在适配好之前,显示的高度不变,像你看到的那样居中显示,上下各一道黑边;适配好之后,再按拉长的屏幕显示。

那么app怎么告诉苹果系统,对于这划时代的新屏幕它是准备好了还是没准备好呢?答案就是:LaunchImage。

系统会先看一个app有没有4寸的LaunchImage。只要给了,那就假定已经适配好了,会按4寸显示;反之,只要没给,就会按3.5寸显示,也就是你看到的黑边。

从那以后,再推出iPhone6、6Plus的时候,也是按同样的方法区分的。没给3x LaunchImage的会直接拉伸显示,给了的才会按大屏渲染,帮助已有的app度过那青黄不接的年代。

90.界面延迟跳转

[self performSelector:@selector(jumpToModifyInfo) withObject:nil afterDelay:2.0];  //界面延迟跳转

91.

-(void)generateSelectedIndexPath{    if (![MyUtil isNilOrEmpty:self.attentionTopic]) {        NSArray * array = [self.attentionTopic componentsSeparatedByString:@";"];        for (NSInteger i = 0; i < array.count; i++) {            NSString * oneTopic = array;            for (NSInteger j = 0; j < self.categories.count; j++) {                NSString * typeName = self.categories[j][@"mentalType"][@"type_name"];                if ([oneTopic isEqualToString:typeName]) {                    [self.categoryChooseStates replaceObjectAtIndex:j withObject:@(YES)];                }            }        }    }}

//这个方法是个实际遇到的问题,首先讲获取到的字符串利用字符串的分割而转换为数组,这样做的一个目的是可以去到这个数组的count,之后进行一次小于数组长度的循环,NSString oneTopic = array;是指每循环一次都将数组内的第i个字符串赋给oneTopic,然后在进行一次针对self.categories的循环,self.categories中保存着全部的“感情话题”的数据,是一个字典,这个循环的目的就是用数组中的oneTopic去字典self.categories中遍历寻找相同的字符串,NSString typeName = self.categoriesj@"type_name"];这句话也是将字典self.categories中[@"mentalType"的内容保存在这个字符串里,并在这里if ([oneTopic isEqualToString:typeName])进行对照和判断。如果在字典中找到相同的字符串,那么[self.categoryChooseStates replaceObjectAtIndex:j withObject:@(YES)]; 这句话就是说,根据字符串相同时所对应的index也就是这个j的值(j也可以理解为是第几个字符串),来改变bool的状态(默认为No),当Bool为yes是,会再其他方法中改变cell的显示状态

92.

STopicViewController * vc = [[UIStoryboard storyboardWithName:@"SSTopicCollectionVC" bundle:nil] instantiateViewControllerWithIdentifier:@"sss"];//把当前界面的self.attentionTopic的值,直接传给下一个界面的attentionTopicvc.attentionTopic = self.attentionTopic;[self.navigationController pushViewController:vc animated:NO];

//关于界面传值这个东西,也不是说逻辑上的理解,总之就是头脑要清醒,要想清楚是怎么传,怎么得到。上面这个方法就是A类中的全局变量self.attentionTopic的值传给B类中的全局变量attentionTopic来使用,利用

STopicViewController * vc = [[UIStoryboard storyboardWithName:@"SSTopicCollectionVC" bundle:nil] instantiateViewControllerWithIdentifier:@"sss"];

这个方法来拿到B类的实例,也就是获取到B类,这样就可以获取到B类中h文件中声明的变量,利用A类的变量来直接赋值给B类的变量,直接改变在B类中attentionTopic的值,以此来达到见面之间传值的目的。ps:A类视图跳转到B类视图

93.
//保存选中时的数据

-(NSString *)getMentalType{    NSMutableArray * tmpArray = [@[] mutableCopy];    for (NSInteger i = 0; i < self.categoryChooseStates.count; i++) {        BOOL isChoose = [self.categoryChooseStates boolValue];        if (isChoose) {            [tmpArray addObject:self.categories[@"mentalType"][@"type_name"]];        }    }    if (tmpArray.count == 0) {        return @"";    }    NSString * string = [tmpArray componentsJoinedByString:@";"];    return string;}

//相当于整个方法就是调用最后这个返回的string 

94.网络解析更换借口地址后,参数记得同时调整

95.传值要在界面跳转之前完成,先有数据,后有显示

96.取到cell的index

-(void)tapComplaintBtn:(SSmyReferCell *)cell{    NSIndexPath * indexPath = [self.tableView indexPathForCell:cell];    SSComplainViewController * vc = [[UIStoryboard storyboardWithName:@"MyCenter" bundle:nil]instantiateViewControllerWithIdentifier:@"complain"];    vc.bIdStr = self.myQuestionList[indexPath.section][@"question"][@"id"];    [self.navigationController pushViewController:vc animated:YES];}

//取到cell的index

97.label设置边框

//label设置边框CALayer * layer = [self.classLabel layer];[layer setCornerRadius:10];[layer setMasksToBounds:YES];layer.borderColor = [[UIColor lightGrayColor] CGColor];[layer setBorderWidth:1];[self.view addSubview:self.classLabel];

98.调用方法时,要遵循代理协议
textView.delegate = self;设置好委托。就能响应
-(void)textViewDidBeginEditing:(UITextView *)textView方法
-(void)textViewDidEndEditing:(UITextView *)textView方法了 

99.text居中显示

cell textLabel textAlignment = UITextAlignmentCenter  //cell.label的text居中显示

100.关于Label显示不完过长字符串的问题,在视图右边调整行数,以及右上的宽度,outLaout不要约束宽度

101.在强调一遍,界面传值时,A传值给B,现在B界面的头文件中声明好用来保存的参数,然后,在A界面实例化B的类名,然后objectB.用于保存的参数=A的self.传值的参数

102.调用A类方法时,注意在B类头文件中声明想要引用的对应的方法名

103.想要拿到具体数据时,接口解析后返回的参数要看清楚字段的数量和名称
如:

(lldb) po responseObject[@"data"]{    code = 0;    complaint =     {        "b_id" = 889;        "b_type" = 1;        content = Tyyygggghhjgffddcvvbb;        "create_time" = "2015-10-19 00:39:16";        id = 19;        "reason_id" = 2;        state = 0;    };    msg = "\U64cd\U4f5c\U6210\U529f";}

就应该以responseObject@"data"[@"state"]的形式来调用

104.解析到参数内容是整数的,需要进行比较时,如下处理:

NSInteger state = [responseObject[@"data"][@"complaint"][@"state"] integerValue];if(state == 1){    self.handleState.text = @"客服已处理";}else{    self.handleState.text = @"处理中";}

105.swift用let来声明常量,用var来声明变量。常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode 码位,连线与制表符。也不能以数字开头,但是可以在常量与变量名的其他地方包含数字。

106.swift你可以更改现有的变量值为其他同类型的值,如:friendlyWelcome的值从"Hello!"改为了"Bonjour!"。与变量不同,常量的值一旦被确定就不能更改了。尝试这样做会导致编译时报错.

107.swift你可以用println函数来输出当前常量或变量的值,println是一个用来输出的全局函数,输出的内容会在最后换行。如果你用 Xcode,println将会输出内容到“console”面板上。(另一种函数叫print,唯一区别是在输出内容最后不会换行。)

108.swift与 Cocoa 里的NSLog函数类似的是,println函数可以输出更复杂的信息。这些信息可以包含当前常量和变量的值。

Swift 用字符串插值(string interpolation)的方式把常量名或者变量名当做占位符加入到长字符串中,Swift 会用当前常量或变量的值替换这些占位符。将常量或变量名放入圆括号中,并在开括号前使用反斜杠将其转义:

println("The current value of friendlyWelcome is (friendlyWelcome)")
// 输出 "The current value of friendlyWelcome is Bonjour!
//意思就是输出printIn内参数的值或内容
object-c中的写法就是 Dlog(@"The current value of friendlyWelcome is %@",friendlyWelcome);
就是这点区别

109.如果在上一个if中进行了bool型判断,那么为了避免列表上下滑拉刷新时所造成的显示混乱,那么就要在下面的else中写入相反的bool量,即代码的重用问题

110.与其他大部分编程语言不同,Swift 并不强制要求你在每条语句的结尾处使用分号(;),当然,你也可以按照你自己的习惯添加分号。有一种情况下必须要用分号,即你打算在同一行内写多条独立的语句:

let cat = "                                             
0 0
原创粉丝点击