转载请务必注明出处(all copyright reserved by iOSGeek)

  本文主要分为两个部分,第一部分介绍Swift的基本语法,第二部分讲解一个利用WebView来打开百度、sina等网页的小demo,如果对swift的语法不感兴趣的同学可以直接跳到第二部分来感受下Swift的魅力~(本文的demo源码已上传至github:https://github.com/iOSGeek0829/XSurfing)

一、Swift常用语法

  Swift是Apple去年推出的一门新的语言,基于C和Objective-C,而没有C的一些兼容约束,它采用了安全的编程模式和添加现代的功能来使得编程更加简单、灵活和有趣(以上copy自百度)。在Swift语言中你会发现JS、Java、C++等的影子,所以Swift被网友戏称为“伍仁”语言,好了,话不多说我们开始介绍Swift的基本语法。

  1、常量、变量定义  

  1. 定义常量用let关键字 let country = "China",定义变量用var关键字var team = "HiLink",注意:SwiftObjective-C的区别——定义字符串不需要加"@",常量、变量的类型是可选的,如果在声明的同时就赋值的话,编译器会自己推断出变量类型,比如countyteam就是字符串类型,再比如说定义var pi = ,那么pi就是int类型,那我想让pi变为float类型该怎么办呢?我们只需在声明的时候显示地制定类型就可以了,比如var pi:Float = ,此时pi就是float类型了

  2、数组、字典定义

  1. 数组、字典用[]来定义,可以用下标或键(key)来访问,比如var animals = ["dog","cat","moneky"]定义一个动物数组,再比如var webSites = ["baidu":"www.baidu.com","sina":"www.sina.com"]定义一个网址字典,用webSites["baidu"]来获取“baidu”的value,即webSites["baidu"] == www.baidu.com
  2. ,如果要创建空的数组或者字典,就需要使用初始化语法,比如var animals = [String]()
  3. var webSites = [Dictionary<String,String>].self

  3、控制流if、switch、for-in、while

  1. Swift在控制流语法中最大的特色是:包裹条件和循环变量括号可以省略,但内容体的大括号是必须的。比如:
  2. var salarys = [,,,]
  3. for salary in salarys
  4. {
  5. if salary >
  6. {
  7. println("有钱淫~")
  8. }
  9. else
  10. {
  11. println("穷屌丝~")
  12. }
  13. }
  14. 可以看到if的条件部分可以不用(),另外if的条件语句必须是Bool类型,如果把上述例子改为:
  15. if salary
  16. {
  17. println("有钱淫~")
  18. }
  19. 则编译器会提示错误,注:println类似Objective-CNSLog()。
  20. 再讲一下Switch语句,Swift中的Switch语句支持任意类型的数据——不仅仅是整数哦,另外switch中每个case不需要在末尾加break,只要执行了一个case后自动跳出,不会依次往下执行,例子代码如下:
  21. let today = "Friday"
  22. switch today
  23. {
  24. case "Monday":
  25. println("fuck day!")
  26. case "Friday":
  27. println("nice day!")
  28. default:
  29. println("fighting day!")
  30. }
  31. while循环没什么特殊的就不赘述了~

  4、函数

  1. swiftfunc来定义函数,函数原型为:func 函数名(参数1,参数2...) -> 返回类型,示例代码如下:
  2. func whoami() -> String
  3. {
  4. return "Jackie Chan"
  5. }
  6. 函数原型:func 函数名(参数1,参数2...) -> 返回类型
  7. func join(s1: String, s2: String, joiner: String) -> String
  8. { return s1 + joiner + s2
  9. }
  10. join("hello", "world", ", ")
  11. // returns "hello, world "
  12.  
  13. 外部参数名
  14. func join(string s1: String, toString s2: String, withJoiner joiner: String) -> String { return s1 + joiner + s2
  15. }
  16. join(string: "hello", toString: "world", withJoiner: ", ")
  17. // returns "hello, world“
  18.  
  19. Shorthand 外部参数名
  20. func join(#string: String, #toString: String, #withJoiner : String) -> String
  21. {
  22. return string + toString + withJoiner
  23. }
  24. join(string: "hello", toString: "world", withJoiner: ", ")
  25. 默认参数值
  26. func join(string s1: String, toString s2: String,withJoiner joiner: String = " ") -> String
  27. {
  28. return s1 + joiner + s2
  29. }
  30. join(string: "hello", toString: "world", withJoiner: "-")
  31. // returns "hello-world "
  32. join(string: "hello", toString: "world")
  33. // returns "hello world "

  5、元组

  1. 元组:把多个值组合成一个简单的复合值
  2. let http200Status = (statusCode: , description: "OK")
  3. // http200Status is of type (Int, String), and equals (200, "OK")
  4. println("The status code is \(http200Status.statusCode)")
  5. // prints "The status code is 200 "
  6. println("The status message is \(http200Status.description)")
  7. // prints "The status message is OK"

  6、类和对象  

  1. swift中类用class来定义,类中的变量和方法与普通的变量与函数定义一致,没什么区别,对象就用类名+构造方法生成,例子代码如下:
  2. 类定义
  3. class ClassName{}
  4. class Car
  5. {
  6. var name:String
  7. init(name:String)
  8. {
  9. self.name = name
  10. }
  11. func carName() ->String
  12. {
  13. return name
  14. }
  15. }
  16. var domesticCar = Car(name: "BYD")
  17. println(domesticCar.carName())
  18. //prints:"BYD”

  7、初始化

  1. Designated&Convenience
  2. init(parameters)
  3. {
  4. statements
  5. }
  6. convenience init(parameters)
  7. {
  8. statements
  9. }

  8、属性

  1. Stored Properties & Computed Properties
  2. class Car
  3. { var name:String
  4. var carName:String{
  5. get{ return name; }
  6. set(newName){ name = newName }
  7. }
  8. init(name:String)
  9. {
  10. self.name = name
  11. }
  12. }
  13. var domesticCar = Car(name: "BYD")
  14. var name = domesticCar.carName
  15. domesticCar.carName = "BMW "

  9、类型后面跟?或者!以及as

  1. swift中如果在声明一个变量时不手动初始化,swift不会为该变量自动赋一个默认值,但对于Optinal的变量则不同,Optinal类型的变量如果没初始化,则swift自动会为该变量赋为nil。那怎么声明一个Optional变量呢?只要在声明时在类型后面加上? 或者!就行了,比如
  2. var urlRequest:NSURLRequest? //urlRequest == nil
  3. 而?和!的区别就是:?表示该变量可能为nil也可能不为nil,而!则表示该变量肯定不为nil
  4. 另外as表示类型转换,比如
  5. webAddress = item.objectForKey(webName[]) as! String
  6. 表示把value强制转换为String类型。

  呼~~~~swift基本语法终于讲完了,让我们休息一下吧~

二、利用WebView打开百度、新浪等网页(Swift版本)(本文的demo源码已上传至github:https://github.com/iOSGeek0829/XSurfing)

  如果您已经看到这儿了,说明您是一位非常有耐心的人,wish you achieve your dream~~(haha~~~)

  这一部分主要讲解一个利用WebView来打开百度、新浪等网页的小demo,最终实现的效果如下所示:(点击相关的网站名称,然后跳转到另一个界面来显示对应的网站内容,界面太丑,只是用来演示,勿拍~)

                                                                 

                                                               网站选择界面                                对应的网页显示界面

下面来讲解实现部分:

1、界面实现:

  界面主要在storyboard中实现,“网站选择界面”是一个UITableviewController,“网页显示界面”是普通的UIViewController+WebView,整个界面的实现非常简单,截图如下所示:

2、逻辑部分

  主要分为2个ViewController,一个是“网站选择”Controller,另一个是“网页内容显示”ViewController。

  “网站选择”Controller源码如下:(看注释就能明白了)

  1. //
  2. // ViewController.swift
  3. // XSurfing
  4. //
  5. // Created by huixinming on 6/24/15.
  6. // Copyright (c) 2015 huixinming. All rights reserved.
  7. //
  8.  
  9. //引入相关头文件
  10. import UIKit
  11. import Foundation
  12.  
  13. class ViewController: UITableViewController {
  14. //创建相关网站字典模型
  15. let baidu = ["百度":"http://www.baidu.com"]
  16. let sina = ["新浪":"http://sina.com"]
  17. let phoenix = ["凤凰网":"http://www.ifeng.com"]
  18. //用于存储需要显示的网站
  19. var webSites:NSMutableArray
  20. //选择的网址,默认是百度
  21. var webAddress:String = "http://www.baidu.com"
  22. //storyboard创建controller必须要实现的初始化方法,可以在此处给成员变量赋初值
  23. required init!(coder aDecoder: NSCoder!) {
  24. //把要显示的网站添加进来,有个疑问是:在该方法中super.init方法必须在初始化完子类的成员变量后才能调用
  25. webSites = [baidu,sina,phoenix]
  26. super.init(coder: aDecoder)
  27. }
  28. //覆盖父类的相关方法
  29. override func viewDidLoad() {
  30. super.viewDidLoad()
  31. // Do any additional setup after loading the view, typically from a nib.
  32. //设置该ViewController的title和根View的背景色
  33. self.navigationItem.title = "XSuring"
  34. self.view.backgroundColor = UIColor.redColor()
  35. }
  36. override func didReceiveMemoryWarning() {
  37. super.didReceiveMemoryWarning()
  38. // Dispose of any resources that can be recreated.
  39. }
  40. //覆盖UITableView的相关delegate方法
  41. override func numberOfSectionsInTableView(tableView: UITableView) -> Int
  42. {
  43. return
  44. }
  45. override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
  46. {
  47. //返回要显示的行数
  48. return webSites.count
  49. }
  50. override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
  51. {
  52. //设置cell的相关显示
  53. let cellIdentifier:String = "webCell"
  54. var cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as! UITableViewCell
  55. var row = indexPath.row
  56. var item = webSites[row] as! NSDictionary
  57. var webName:NSArray = item.allKeys
  58. cell.textLabel?.text = webName[] as? String
  59. return cell
  60. }
  61. override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
  62. {
  63. var row = indexPath.row
  64. var item = webSites[row] as! NSDictionary
  65. var webName:NSArray = item.allKeys as NSArray
  66. webAddress = item.objectForKey(webName[]) as! String
  67. //点击时跳转到“网页内容显示界面,showDetailWebContent是storyboard segue identifier”
  68. self.performSegueWithIdentifier("showDetailWebContent", sender: self)
  69. }
  70. //把选中的网站url传递给“网页内容显示controller”
  71. override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
  72. {
  73. var webViewController = segue.destinationViewController as! WebViewController
  74. webViewController.detailURL = webAddress
  75. }
  76. }

“网页内容显示”ViewController源码如下:(看注释就能明白了)

  1. //
  2. // WebViewController.swift
  3. // XSurfing
  4. //
  5. // Created by huixinming on 6/26/15.
  6. // Copyright (c) 2015 huixinming. All rights reserved.
  7. //
  8. import UIKit
  9. import Foundation
  10.  
  11. class WebViewController: UIViewController,UIWebViewDelegate {
  12. @IBOutlet weak var webView: UIWebView!
  13. var tipLabel:UILabel
  14. var loading:UIActivityIndicatorView
  15. //需要加在的url,默认是百度
  16. var detailURL:String = "http//www.baidu.com"
  17. var urlRequest:NSURLRequest?
  18. required init(coder aDecoder: NSCoder) {
  19. //初始化提示语和加载框
  20. tipLabel = UILabel(frame: CGRectMake(, , , ))
  21. loading = UIActivityIndicatorView(activityIndicatorStyle:.Gray)
  22. super.init(coder: aDecoder)
  23. }
  24. override func viewDidLoad() {
  25. super.viewDidLoad()
  26. //构建url请求对象
  27. var url = NSURL(string: detailURL)
  28. urlRequest = NSURLRequest(URL: url!)
  29. webView.loadRequest(urlRequest!)
  30. //把webview的委托设为自己
  31. webView.delegate = self
  32. tipLabel.backgroundColor = UIColor.clearColor()
  33. tipLabel.numberOfLines =
  34. webView.scrollView.addSubview(loading)
  35. loading.center = webView.center
  36. }
  37. func webViewDidStartLoad(webView: UIWebView)
  38. {
  39. //开始加载网页时显示loading框
  40. loading.startAnimating()
  41. }
  42. func webViewDidFinishLoad(webView: UIWebView)
  43. {
  44. //当网页加载完成后,消失loading框和提示语
  45. loading.stopAnimating()
  46. tipLabel.removeFromSuperview()
  47. }
  48. func webView(webView: UIWebView, didFailLoadWithError error: NSError)
  49. {
  50. //当网页加载失败时,消失loading框,显示提示语
  51. loading.stopAnimating()
  52. tipLabel.text = "ERROR!"
  53. view.addSubview(tipLabel)
  54. }
  55. }

啊~~终于完了,相信聪明的你看到这儿应该会用swift做个小小的demo了吧,快去试试吧,祝你玩的愉快!!

(本文的demo源码已上传至github:https://github.com/iOSGeek0829/XSurfing)

PS:文章标题之所以叫“swift轻松入门”纯粹只是为了吸引眼球,其实自己对swift也只是了解了最最基本的,只看完了swift tour部分,如果想深入了解swift还需多阅读Apple给出的“The Swift Programming Language”“Using Swift with Cocoa and Objective-C”文档。

祝大家玩的开心!!!!

Swift轻松入门——基本语法介绍和详细地Demo讲解(利用WebView打开百度、新浪等网页)的更多相关文章

  1. flex弹性布局语法介绍及使用

    一.语法介绍 Flex布局(弹性布局) ,一种新的布局解决方案 可简单.快速的实现网页布局 目前市面浏览器已全部支持1.指定容器为flex布局 display: flex; Webkit内核的浏览器, ...

  2. Swift翻译之-Swift语法入门 Swift语法介绍

    目录[-] Hello world - Swift 简单赋值 控制流 函数与闭包 对象和类 枚举与结构 协议和扩展 泛型 2014.6.3日,苹果公布最新编程语言Swift,Swift是一种新的编程语 ...

  3. 一、vue基础语法(轻松入门vue)

    轻松入门vue系列 Vue基础语法 一.HelloWord 二.MVVM设计思想 三.指令 1. v-cloak 2. v-text 3. v-html 4. v-show 4. v-pre 5. v ...

  4. freemarker语法介绍及其入门教程实例

    # freemarker语法介绍及其入门教程实例 # ## FreeMarker标签使用 #####一.FreeMarker模板文件主要有4个部分组成</br>####  1.文本,直接输 ...

  5. C++ STL编程轻松入门基础

    C++ STL编程轻松入门基础 1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL 1.2 追根溯源:STL的历史 1.3 千丝万缕的联系 1.4 STL的不同实现版本 2 牛刀小试 ...

  6. Apple Swift编程语言入门教程

    Apple Swift编程语言入门教程 作者: 日期: 布衣君子 2015.09.22 目录 1   简介 2   Swift入门 3   简单值 4   控制流 5   函数与闭包 6   对象与类 ...

  7. Groovy轻松入门——通过与Java的比较,迅速掌握Groovy (更新于2008.10.18)

    摘自: http://www.blogjava.net/BlueSUN/archive/2007/03/10/103014.html Groovy轻松入门--通过与Java的比较,迅速掌握Groovy ...

  8. [转]Swift 编程语言入门教程

    今天在网上看到一篇非常好的教程,分享给大家 原文地址:http://gashero.iteye.com/blog/2075324 目录 1   简介 2   Swift入门 3   简单值 4   控 ...

  9. Apple Swift编程语言入门

    1   简单介绍 今天凌晨Apple刚刚公布了Swift编程语言,本文从其公布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的iOS&a ...

随机推荐

  1. [iOS基础控件 - 6.6] 展示团购数据 自定义TableViewCell

    A.需求 1.头部广告 2.自定义cell:含有图片.名称.购买数量.价格 3.使用xib设计自定义cell,自定义cell继承自UITableViewCell 4.尾部“加载更多按钮”,以及其被点击 ...

  2. [一]JQueryMobile简介

    JQueryMobile 基于JQuery,实现对不同尺寸手机屏幕的支持,提供了许多组件,以及对于手机端的常用事件(touch.tap.taphold) 如何使用 1.引入jquery.js.jque ...

  3. Web 应用的安全性

    Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分.用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统.用户授权 ...

  4. JPA主键策略

    JPA 自带的主键策略有 4 种,在枚举 javax.persistence.GenerationType 中,分别是:TABLE.SEQUENCE.IDENTITY.AUTO. TABLE:通过表产 ...

  5. 【Stage3D学习笔记续】山寨Starling(九):上下文丢失处理方法

    Stage3D在运行中是存在随时会丢失上下文的尴尬情况. 渲染内容丢失的问题本身就说明是因为丢失了Context3D对象.出现此问题的原因很多,通常还不是因为Stage3D应用.比如在win7系统中, ...

  6. 【Stage3D学习笔记续】山寨Starling(二):VertexData探幽

    还记得之前的学习笔记中我们的顶点缓冲数组中的顶点数据么,我们使用一个一维数组来记录所有的顶点数据,这是由于顶点缓冲上传数据时是使用的一维数组. 如果对顶点数据进行一层代码的封装,就能更加的方便我们来操 ...

  7. 原”zencart建站仿站俱乐部”现升级为”zencart 学院“!

    特别告示: 原”zencart建站仿站俱乐部”现升级为”zencart 学院“!

  8. 智能电视TV开发---客户端和服务器通信

    在做智能电视应用的时候,最头疼的就是焦点问题,特别是对于个人开发者,没有设备这是最最头疼的事情了,在没有设备的情况下,怎么实现智能电视应用呢,接下来我是用TV程序来做演示的,所以接下来的所有操作是在有 ...

  9. 数学之路(3)-机器学习(3)-机器学习算法-SVM[5]

    svm小结 1.超平面 两种颜色的点分别代表两个类别,红颜色的线表示一个可行的超平面.在进行分类的时候,我们将数据点  x 代入  f(x)  中,如果得到的结果小于 0 ,则赋予其类别 -1 ,如果 ...

  10. php开启新的进程或者线程

    开启线程: $php_cli_path = '/usr/bin/php';$dir_path = dirname(__FILE__)."/".'CheckTaskState.she ...