xcode8.3 开发ios8
2014-11-27 17:04:06 kmyhy 阅读数 3936

90、找不到 Profile 错误“CodeSign error: no provisioning profile at path '/Users/yourname/Library/MobileDevice/ProvisioningProfiles/F87A055A-EC0D-4F19-A015-57AB09DEBECB.mobileprovision'”

在 ProjectNavigator 中选择你的项目,使用 View ->Version Editor -> Show Version Editor(或者使用工具栏上的“”按钮)。在当前版本(即 左边的文本窗格)中编辑,搜索“F87A055A-EC0D-4F19-A015-57AB09DEBECB”字串,然后将所有的“"PROVISIONING_PROFILE[sdk=iphoneos*]" ="F87A055A-EC0D-4F19-A015-57AB09DEBECB";”行删除。

91、iOS 7 中,导航栏重叠在 ViewController 的 view 之上(即 view 上移了 44 像素)

将导航控制器的 Top Bar 设置为一种“Opacque ...”(不透明)类型。

92、为什么导航栏的righBarButtonItems 显示的排列顺序跟它们加入时的相反?

rightBarButtonItems 中的 item 在加入时是从右向左加入的。

假设我们这样加入3个按钮到 rightBarButtonItems 中:

[self.navigationItem setRightBarButtonItems:@[b1,b2,b3]animated:NO]; 则你看到的3个按钮排列顺序为:b3,b2,b1。

93、为什么有时候用 OTA 方式安装程序后会多出一个“正在安装...”图标,并无法删除该图标?

该问题只在 iOS 7 下存在。如下图所示:


其中,“网络助手”是程序安装完出现在桌面上的图标,“正在安装...”是安装过程中显示的图标,这个图标在安装完成后仍然存在,并且用户无法删除。

这是由于安装是的描述文件( .plist 文件)和 .ipa 文件中的 bunndle id 不一致导致的。解决办法,修改项目的Bundle ID为 .plist 文件中的Bundle ID,编译出新的 .ipa 文件,然后重新在设备上安装此 .ipa 文件。此时“正在安装...”图标即可删除。

94、无意中修改了 SDK 的头文件,Xcode报告“'xxx.h' hasbeen modified since the precompiled header was built”

Clean,仍然无法编译,在关闭 Xcode 时,Xcode 提示文件不存在,无法自动保存,并不允许退出。使用“强制退出...”关闭 Xcode,Clean,重新编译成功。

95、iOS 7.1下in-house发布无法安装 app,报告“Could not load non-https manifest URL”

将部署所使用的 manifest.plist文件放到 https 服务器上,并且将 manifest URL 由原来的 http 地址改为 https 地址。

96、如何让 UIButton 的 image 位于 title 的右边?

默认情况下 UIButton 的 image 位于 title 左边:

但有时候你可能希望是这样的:

则需要使用到setImageEdgeInsets 方法:

float width = _button.bounds.size.width;

    [_buttonsetImageEdgeInsets:UIEdgeInsetsMake(0, width-_button.imageView.bounds.size.width,0, 0)];

    [_buttonsetTitleEdgeInsets:UIEdgeInsetsMake(0, -_button.imageView.bounds.size.width+5,0, 0)];

97、修改table view的 section header 样式

请使用UITableViewDelegate 中的 willDisplayHeaderView方法。

- (void)tableView:(UITableView *)tableViewwillDisplayHeaderView:(UIView *)view forSection:(NSInteger)section

{

    if([viewisKindOfClass:[UITableViewHeaderFooterView class]]){

       

       UITableViewHeaderFooterView *tableViewHeaderFooterView =(UITableViewHeaderFooterView *) view;

       tableViewHeaderFooterView.contentView.backgroundColor = [UIColorclearColor];

       tableViewHeaderFooterView.textLabel.font=[UIFont systemFontOfSize:13];

       tableViewHeaderFooterView.textLabel.textColor=[UIColor blackColor];

    }

}

98、定制 search bar的背景色

for (UIView *subview in self.searchBar.subviews)

    {

        if([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")])

        {

           [subview removeFromSuperview];

           break;

        }

    }

   self.searchBar.backgroundColor = [UIColor colorWithWhite:0.85 alpha:1];

99、Autolayout 下 UIScrollView 不会滚动

只有当 UIScrollView 的 ContentSize 大于 UIScrollView 的 frame 大小,UIScrollView 才可滚动。

但由于 constraints 的影响, 设置 ContentSize 往往无效,因此UIScrollView不可滚动。我们可以实现 viewDidLayoutSubviews 方法,在该方法中设置 ContentSize :

- (void)viewDidLayoutSubviews {

_scrollView.contentSize=CGSizeMake(_scrollView.frame.size.width,_scrollView.frame.size.height+60);

}

100、在头文件中出现某个type“Unknown type name”

其实该 type 所在的框架或库已被引用。例如出现错误“Unknown type name CGPoint”,而 CGPoint 所在的框架 CoreGraphics 已被项目正确引用了。

这种错误是由于“交叉头文件引用”导致的。典型的错误是,一个头文件(例如 a.h)在 .pch 文件中包含了。而 .pch 文件在编译任何 .m 文件中都会自动被包含。 因此如果要在 .pch 文件中包含 a.h 文件,正确的做法是用 #ifdef__OBJC__ 宏:

#ifdef __OBJC__

    #import "a.h"

#endif

 

2019-05-05 11:05:37 ciloveyou123 阅读数 48

斯坦福大学公开课:iOS 8开发: http://open.163.com/special/opencourse/ios8.html

2017-02-03 16:38:30 worisaa 阅读数 112

Swift Playgrounds

     在2014年,苹果公司的世界开发者大会上,苹果推出了让所有iOS开发惊讶的新的编程语言Swift。Swift被宣传为“快速,现代,安全,交互”编程语言。Swift语言简单易学并且拥有很多提高编程效率的特征。

在Swift语言推出之前,iOS app主要由Objective-C语言编写。苹果公司选择这门语言作为Mac和iOS开发的主语言已经有20多年时间了。我和很多iOS开发人员交流过。他们中的大部分都认为Objective-C不易学习并且语法怪异。简而言之,Objective-C 代码吓到了不少开始学习iOS编程的初学者。Swift编程语言的发布可能就是苹果公司对这些评论的一种答复。Swift的语法更加整洁并且容易阅读。从Swift的beta版本发布我就开始使用它编程。我想说,你肯定会认同使用Swift开发会更有效率。Swift确确实实加速了开发进程。一旦你习惯了使用Swift编程,你将不再愿意再使用Ojbective-C。

在我看来,Swift将会吸引更多的网络开发人员开发App。如果你是一名具有某种脚步语言编程经验的网络开发人员,你的经验将会帮助你更好的掌握iOS开发知识。对你来说Swift学习将会很简单。即使你完全没有编程经验也没有关系,你会发现这门语言很友好并且使用Swift开发app感觉非常自然。

让我们通过对比以下程序片段,初步了解一下Swift语言。

 

Objective-C

const int count = 10;
double price = 23.55;
NSString *firstMessage = @"Swift is awesome. ";
NSString *secondMessage = @"What do you think?";
NSString *message = [NSString stringWithFormat:@"%@%@", firstMessage, secondMessage];
NSLog(@"%@", message);

Swift

let count = 10
var price = 23.55
let firstMessage = "Swift is awesome. "
let secondMessage= "What do you think?"
var message = firstMessage + secondMessage
println(message)

第一段代码是由Objective-C编写的,而第二段代码是由Swift编写的。你喜欢哪种语言呢?我猜想你会更喜欢Swift,特别是你会觉得Objective-C的语法非常怪异。常量和变量是编程语言中最基本的两个元素。在Objective-C中,当你声明一个常量或者变量时,你需要指明类型信息,比如integer或者string。对于Swift,引入了一种新的功能,名叫类型推断(Type inference)。你不再需要说明变量或者常量的类型信息。你只需要使用let说明常量和使用var说明变量即可。Swift足够智能,可以通过检查你提供的值来推断类型。

你可能注意到了另外一个不同:Swift省略了队尾的分号。在Objective-C,你在句尾梳写分号。如果你忘记了分号,将会编译错误。很多Objective-C的初学者都经历过这种错误。Swift语言会让你的开发更加简单。Swift增加了许多强力特征让你的编程工作更加流畅。正如你在上面的例子中看见的,String(字符串)的维护更加简单。在Objective-C中,你需要选择NSString和NSMutableString类型来暗示该String是否可以背修改。在Swift中你不必这样做。无论什么时候你将一个字符串String声明为变量,在你的程序里你都可以修改这个字符串。连接字符串非常简单。只要使用+号就可以连接两个字符串。更进一步,Swift允许你直接使用==符号对比字符串。

 

学习编程最好的方法就是直接写程序。Xcode 6新增了一个功能叫做Playgrounds。这是一个交互式开发环境,开发者可以在该环境里实验编程并且可以直接看到程序运行结果。假设你安装了Xcode 6(或者以上),运行Xcode,你会看到如下开始界面。

Playground是一种特别类型的Xcode文件。你只需要点击“Start with a Playground”,然后在弹出的界面填写项目名和选择平台类型。你可以使用默认的名字或者自己命名,但记得需要选择iOS平台。

一旦你确认并保存信息文件完毕,Xcode将会打开如下Playground交互界面。你会在屏幕中看到在屏幕的左边面板,是你编辑代码的界面。

当你在左边输入代码时,Playground将立即解释你的代码并在右侧面板显示结果。默认情况下,Playground包含两行代码。你可以在右侧面板立刻看到“Str”声明的结果。

我们一起来写一些代码。这个练习的目的是让你初步接触一下Swift编程并且对Xcode有个初步的印象。在讲述过程中我将会解释一部分代码。但是即使你看不懂任何一行代码也没有关系,特别是你还是一个新手的话。我想你会对一些术语比如:类,方法等感到困惑 。现在,不要多想,全身放松地去使用Xcode。我们将再后面的章节介绍这些概念 。

 

让我们马上开始。

首先,让我们看一下两行代码的关键字。这里我们又定义了两个变量。

var  message1 = "Hello Swift! How can I get started?"
var  message2 = "The best way to get started is to stop talking and code."

当你输入上面的代码时,你马上可以在右侧的面板上看到结果

让我们继续增加下面的代码

message1 .uppercaseString

 

Xcode的编辑器会弹出一个自动完成功能。自动完成功能是一项非常友好的能够帮助你快速完成代码的功能。一旦你输入“mess”,你将会看到一个自动完成窗口,里面会给出一些基于你的输入的一些建议。这时你需要做的就是选择“message1”并且敲击回车。

Swift使用点(.)语法来实现方法调用或者访问变量的属性。当你在message1后面输入点时,自动完成窗口会再一次弹出。里面会列出一系列属于该变量的方法或者属性。你可以继续输入“uppercaseString”或者从自动完成窗口选择。

一旦你完成输入,你可以立刻在输出窗口看到结果。当你使用UppercaseString属性,message1的内容将会自动转换成大写。

 

继续输入以下代码

message2 .lowercaseString +  " Okay, I'm working on it   "

Swift允许你使用+号连接两个字符串(String)。上面这行代码将message2的内容转换成小写,

 

并且和另一个string连接在一起。更有趣的是,你可以在你的代码中包含emoji字符图形。你可能会问如何在MaxOS中输入emoji字符。很简单,按下control+command+spacebar(控制+命令+空格键),就会出现emoji图形选择窗口。

让我们继续输入下面的代码片段:

 

if message1  == message2  {
    println("Same message")
} else {
    println("Not the same message")
}

条件逻辑在编程中非常常见。有时候,当某个添加满足时你想执行某一段确定的代码。if-else语句是Swift提供的控制流方法之一。在这段代码中,我们使用==操作符对比了message1和message2。如果它们相等,程序会打印出“Same message”。否则,将会打印出“Not the same message”。你将会在你的屏幕中看到如下结果。

让我们做一点更有趣的事情,例如创建一个标签(label),这在用户界面中非常常见:

let  messageLabel =  UILabel(frame:  CGRectMake(0, 0, 300 , 50))
messageLabel.text =  message1
messageLabel

这里我们使用内建的UILabel 类创建了一个label并且设置它的大小为300*50。我们把它的text属性设置为message1.为了在Playground中预览UI元素,你可以点击快速查看(Quick Look)或者历史值(Value History)图标。快速查看功能通过一个弹出窗口显示label。如果你使用历史值(Value History),则Playground会打开一个独立的预览面板

刚才的label是一个毫无特色的label。改变它的颜色应该是个不错的想法。不错的是,你只需要一行代码就可以定制颜色。你还可以很容易的中间对齐文本或者将label设置成圆角。输入如下代码你将会看到一个橘黄色的圆角label

messageLabel.backgroundColor =  UIColor.orangeColor ()
messageLabel.textAlignment  =  NSTextAlignment.Center
messageLabel.layer.cornerRadius =  10.0
messageLabel.clipsToBounds  =  true
messageLabel

这就是iOS SDK的强大能力。它里面包含了成千上万的预定义的元素,并且开发人员只需要很少的代码就可以定制这些元素。

要说一下,不要被我误导了。一般来说创建用户界面你不需要输入代码。Xcode提供一个叫Storyboard(故事板)的功能,你可以通过拖拽来设计UI。我们将会再下一章讲述。

所以你现在对Swift已经有初步概念了。你现在感觉Swift怎么样呢?喜欢它吗?我希望你能感觉到Swift非常容易学习和使用。最重要的是,我希望Swift不会让你不再想开发app。下一章,你将会学到如何创建你的第一个app。

 

2015-08-29 03:50:18 u011472643 阅读数 357

控制器UIViewController的两个属性

tabBarItem和navigationItem
tabBarItem-->UITabBarController
navigation-->UINavigationController

一、控制器的创建方式

1.”通过storyboard方式创建
1> 先加载storyboard文件

UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil];

2> 初始化storyboard控制器

// 初始化箭头所指控制器
WBViewController *wb = [storyboard instantiateInitialViewController];
// 通过一个标识初始化对应的控制器
WBViewController *wb = [storyboard instantiateViewControllerWithIdentifier:@"wb"];

2.”直接创建
WBViewController *wb = [[WBViewController alloc] init];
* 在loadview方法里面添加一些控件

3.”通过关联xib创建

* 通过xib创建的视图控制器是有优先级的
* xib的细节:xib的"File's Owner"代表着界面由哪个类来管理,必须指定"File's Owner"class,然后"File's Owner"的 view 与xib进行连线"此处一定要谨记"

1> 用initWithNibName:指定xib创建(此时xib的名称不受限制)

// xib的名字不受限制,可以与类名不一致
WBViewController *wb = [[WBViewController alloc] initWithNibName:@"WBViewControlller" bundle:nil];

2> 不指定xib的匹配方式

// 只识别两种,优先匹配WBView.xib,在匹配WBViewController.xib
WBViewController *wb = [[WBViewController alloc] init];

4.”视图控制器View的创建流程”

1> 根据loadView中的代码去创建
2> 根据storyboard的描述去创建
3> 根据nibName对应xib的描述去创建
4> 根据WBView.xib的描述去创建
5> 根据WBViewController.xib的描述去创建
6> 创建一个空的view

二、UINavigationController的使用

1.”UINavigationController的使用步骤

// 初始化UINavigationController
UINavigationController* nav = [[UINavigationController alloc] initWithRootViewController:one];
// 设置根控制器
self.window.rootViewController = nav;
// 添加子控制器
[nav addChildViewController:one];
[nav pushViewController:one animated:YES];
nav.viewControllers = @[one];

2.”UINavigationController的子控制器”
1> 属性

@property(nonatomic,copy) NSArray *viewControllers;
@property(nonatomic,readonly) NSArray *childViewControllers;

2> 方法

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;

补充:
pushViewController:方法可以对添加到栈中的控制器进行”拦截”,通过拦截可以对viewController进行设置,达到统一的效果
当然,在控制器的自身的方法viewDidLoad方法中,可以对拦截设置的效果进行覆盖,
方法的执行顺序:pushViewController–> viewDidLoad

三、UINavigationBar内容的设置

UINavigationItem的属性

// 下一个视图的返回按钮
@property(nonatomic,retain) UIBarButtonItem *backBarButtonItem;
// 中间标题的视图
@property(nonatomic,retain) UIView          *titleView;
// 中间标题的文字
@property(nonatomic,copy)   NSString        *title;
// 左上角的视图
@property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem;
// 右上角的视图
@property(nonatomic,retain) UIBarButtonItem *rightBarButtonItem;

四、控制器的生命周期

1.生命周期的几个方法(”次序同时也是生命周期执行的顺序”)

// 加载view
loadView
// 加载完毕
viewDidLoad
// 将要显示
viewWillAppear
// 已经显示
viewDidAppear
// 将要消失
viewWillDisappear
// 已经消失
viewDidDisappear
// 内存警告
didReceiveMemoryWaring
// 即将被卸载
viewWillUnload
// 清空
dealloc
// 卸载完毕
viewDidUnload

五、Segue的使用

storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象

1.Segue的属性

// 唯一标识
@property (nonatomic,readonly) NSString *identifier;
// 来源控制器
@property (nonatomic,readonly) id sourceViewController;
// 目标控制器
@property (nonatomic,readonly) id destinationViewController;

2.segue的类型
1> 自动型:点击控件后自动跳转

使用的场合:不需要任何的判断,直接跳到下一个界面
* 按住"control"直接从"控件"拖线到目标控制器

2> 手动型:需要手动写代码执行Segue

使用的场合:点击控件后,需要做一些判断,满足条件才会跳转
* 按住"control",从"源控制器"拖线到目标控制器
* Segue需要设置一个标识
* 使用perform方法执行对应identifier标识的segue
// self是源控制器
[self performSegueWithIdentifier:@"login2contacts" sender:nil];

3.performSegueWithIdentifier:sender:的执行过程
1> 根据identifier去storyboard中找到对应的线,新建UIStoryboardSegue对象,设置源控制器和目标控制器
2> 为跳转做准备

// 这个sender是performSegueWithIdentifier:sender:的sender
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;

3> 调用Segue对象的- (void)perform;方法执行界面跳转

六、控制器数据的传递

1.顺传
在源控制器的perpareForSegue:sender:方法中根据segue参数获得目标控制器,直接传递数据过去

2.逆传
源控制器成为目标控制器的

七、UITabBarController

UITabBarController控制器包含:UITabBar和UITabBarController的View,添加的viewController会覆盖掉这个View
1.UITabBar

1> 如果UITabBarControllerN个子控制器,那么UITabBar内部就会有NUITabBarButton作为子控件
2> UITabbarButton里面显示的内容由对应子控制器的tabBarItem属性决定

2.UITabBarItem的属性

@property(nonatomic,copy) NSString *title;
@property(nonatomic,retain) UIImage *image;
@property(nonatomic,retain) UIImage *selectedImage;
// 提醒数字
@property(nonatomic,copy) NSString *badgeValue;

3.使用步骤:
代码实现

// 初始化tabbar控制器
UITabBarController *tabbarVc = [[UITabBarController alloc] init];
// 设置为window的跟控制器
self.window.rootViewController = tabbarVc;
// 添加子控制器
UIViewController *vc1 = [[UIViewController alloc] init];
vc1.view.backgroundColor = [UIColor redColor];
vc1.tabBarItem.title = @"联系人";
vc1.tabBarItem.image = [UIImage imageNamed:@"tab_buddy_nor"];
[tabbarVc addChildViewController:vc1];

补充:

// 设置字体的样式
- (void)setTitleTextAttributes:(NSDictionary *)attributes forState:(UIControlState)state;

例子:

NSMutableDictionary * textDict = [NSMutableDictionary dictionary];
textDict[NSForegroundColorAttributeName] = WBColor(123, 123, 123);
[vc.tabBarItem setTitleTextAttributes:textDict forState:UIControlStateNormal];

// 控制器底部的tabBar隐藏
viewController.hidesBottomBarWhenPushed = YES;

storyboard实现

1> 添加跟控制器UITabBarController
2> 添加UINavigationController控制器
3> 右键TabbarController,添加view controller
4> 设置子控制器的UITabBarItem的属性

八、Modal

任何控制器都能通过Modal的形式展示,效果是新控制器从屏幕底部向上钻,直到覆盖原来的控制器

// 以modal形式展示
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion

// 关闭当初的modal出来的控制器
- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void (^)(void))completion;
2017-02-02 14:34:00 weixin_33924770 阅读数 19

Swift Playgrounds

在2014年,苹果公司的世界开发者大会上,苹果推出了让所有iOS开发惊讶的新的编程语言Swift。Swift被宣传为“快速,现代,安全,交互”编程语言。Swift语言简单易学并且拥有很多提高编程效率的特征。


4533051-a8533ed9df3bd410.png

在Swift语言推出之前,iOS app主要由Objective-C语言编写。苹果公司选择这门语言作为Mac和iOS开发的主语言已经有20多年时间了。我和很多iOS开发人员交流过。他们中的大部分都认为Objective-C不易学习并且语法怪异。简而言之,Objective-C 代码吓到了不少开始学习iOS编程的初学者。Swift编程语言的发布可能就是苹果公司对这些评论的一种答复。Swift的语法更加整洁并且容易阅读。从Swift的beta版本发布我就开始使用它编程。我想说,你肯定会认同使用Swift开发会更有效率。Swift确确实实加速了开发进程。一旦你习惯了使用Swift编程,你将不再愿意再使用Ojbective-C。

在我看来,Swift将会吸引更多的网络开发人员开发App。如果你是一名具有某种脚步语言编程经验的网络开发人员,你的经验将会帮助你更好的掌握iOS开发知识。对你来说Swift学习将会很简单。即使你完全没有编程经验也没有关系,你会发现这门语言很友好并且使用Swift开发app感觉非常自然。

让我们通过对比以下程序片段,初步了解一下Swift语言。

4533051-ad6b97f9e5cf42a5.png

第一段代码是由Objective-C编写的,而第二段代码是由Swift编写的。你喜欢哪种语言呢?我猜想你会更喜欢Swift,特别是你会觉得Objective-C的语法非常怪异。常量和变量是编程语言中最基本的两个元素。在Objective-C中,当你声明一个常量或者变量时,你需要指明类型信息,比如integer或者string。对于Swift,引入了一种新的功能,名叫类型推断(Type inference)。你不再需要说明变量或者常量的类型信息。你只需要使用let说明常量和使用var说明变量即可。Swift足够智能,可以通过检查你提供的值来推断类型。

你可能注意到了另外一个不同:Swift省略了队尾的分号。在Objective-C,你在句尾梳写分号。如果你忘记了分号,将会编译错误。很多Objective-C的初学者都经历过这种错误。Swift语言会让你的开发更加简单。Swift增加了许多强力特征让你的编程工作更加流畅。正如你在上面的例子中看见的,String(字符串)的维护更加简单。在Objective-C中,你需要选择NSString和NSMutableString类型来暗示该String是否可以背修改。在Swift中你不必这样做。无论什么时候你将一个字符串String声明为变量,在你的程序里你都可以修改这个字符串。连接字符串非常简单。只要使用+号就可以连接两个字符串。更进一步,Swift允许你直接使用==符号对比字符串。

学习编程最好的方法就是直接写程序。Xcode 6新增了一个功能叫做Playgrounds。这是一个交互式开发环境,开发者可以在该环境里实验编程并且可以直接看到程序运行结果。假设你安装了Xcode 6(或者以上),运行Xcode,你会看到如下开始界面。


4533051-9aeb25253b868be7.png

Playground是一种特别类型的Xcode文件。你只需要点击“Start with a Playground”,然后在弹出的界面填写项目名和选择平台类型。你可以使用默认的名字或者自己命名,但记得需要选择iOS平台。


4533051-f12a978117d9770e.png

一旦你确认并保存信息文件完毕,Xcode将会打开如下Playground交互界面。你会在屏幕中看到在屏幕的左边面板,是你编辑代码的界面。


4533051-5d37a3a6039a0c9f.png

当你在左边输入代码时,Playground将立即解释你的代码并在右侧面板显示结果。默认情况下,Playground包含两行代码。你可以在右侧面板立刻看到“Str”声明的结果。

我们一起来写一些代码。这个练习的目的是让你初步接触一下Swift编程并且对Xcode有个初步的印象。在讲述过程中我将会解释一部分代码。但是即使你看不懂任何一行代码也没有关系,特别是你还是一个新手的话。我想你会对一些术语比如:类,方法等感到困惑 。现在,不要多想,全身放松地去使用Xcode。我们将再后面的章节介绍这些概念 。

让我们马上开始。

首先,让我们看一下两行代码的关键字。这里我们又定义了两个变量


4533051-ef73df757cd23d64.png

当你输入上面的代码时,你马上可以在右侧的面板上看到结果

4533051-e2a4e27b9dcdb3cd.png

让我们继续增加下面的代码

message1 .uppercaseString

Xcode的编辑器会弹出一个自动完成功能。自动完成功能是一项非常友好的能够帮助你快速完成代码的功能。一旦你输入“mess”,你将会看到一个自动完成窗口,里面会给出一些基于你的输入的一些建议。这时你需要做的就是选择“message1”并且敲击回车。


4533051-47daf7eb90eac9cf.png

Swift使用点(.)语法来实现方法调用或者访问变量的属性。当你在message1后面输入点时,自动完成窗口会再一次弹出。里面会列出一系列属于该变量的方法或者属性。你可以继续输入“uppercaseString”或者从自动完成窗口选择。

一旦你完成输入,你可以立刻在输出窗口看到结果。当你使用UppercaseString属性,message1的内容将会自动

转换成大写。

继续输入以下代码


4533051-30b349bbc8cf0b4f.png

Swift允许你使用+号连接两个字符串(String)。上面这行代码将message2的内容转换成小写,

并且和另一个string连接在一起。更有趣的是,你可以在你的代码中包含emoji字符图形。你可能会问如何在MaxOS中输入emoji字符。很简单,按下control+command+spacebar(控制+命令+空格键),就会出现emoji图形选择窗口。

让我们继续输入下面的代码片段:


4533051-be5315091f9e1640.png

条件逻辑在编程中非常常见。有时候,当某个添加满足时你想执行某一段确定的代码。if-else语句是Swift提供的控制流方法之一。在这段代码中,我们使用==操作符对比了message1和message2。如果它们相等,程序会打印出“Same message”。否则,将会打印出“Not the same message”。你将会在你的屏幕中看到如下结果。


4533051-19fc0dd6d8fb23b2.png

让我们做一点更有趣的事情,例如创建一个标签(label),这在用户界面中非常常见:


4533051-c4f61a91669e46fa.png

这里我们使用内建的UILabel 类创建了一个label并且设置它的大小为300*50。我们把它的text属性设置为

message1.为了在Playground中预览UI元素,你可以点击快速查看(Quick Look)或者历史值(Value History)图标。快速查看功能通过一个弹出窗口显示label。如果你使用历史值(Value History),则Playground会打开一个独立的预览面板


4533051-24db8273ace3bb87.png

刚才的label是一个毫无特色的label。改变它的颜色应该是个不错的想法。不错的是,你只需要一行代码就可以定制颜色。你还可以很容易的中间对齐文本或者将label设置成圆角。输入如下代码你将会看到一个橘黄色的圆角label。


4533051-7cad29681115fcb9.png

这就是iOS SDK的强大能力。它里面包含了成千上万的预定义的元素,并且开发人员只需要很少的代码就可以定制这些元素。


4533051-7017b16fa8e882ff.png

要说一下,不要被我误导了。一般来说创建用户界面你不需要输入代码。Xcode提供一个叫Storyboard(故事板)的功能,你可以通过拖拽来设计UI。我们将会再下一章讲述。

所以你现在对Swift已经有初步概念了。你现在感觉Swift怎么样呢?喜欢它吗?我希望你能感觉到Swift非常容易学习和使用。最重要的是,我希望Swift不会让你不再想开发app。下一章,你将会学到如何创建你的第一个app。

专题目录:

IOS 8 开发入门--序言(一)

IOS 8 开发入门--序言(二)

第一章:创建你的第一个App(一)

第一章:创建你的第一个App(二)

第二章:使用Storyboard设计用户界面(一)

第二章:使用Storyboard设计用户界面(二)

第三章 Hello World App 浅述(二)

第四章 自动布局(一)

没有更多推荐了,返回首页