热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

转载请务必注明出处(allcopyrightreservedbyiOSGeek)本文主要分为两个部分,第一部分介绍Swift的基本语法,第二部分讲解一个利用WebView来打开百度

  转载请务必注明出处(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、常量、变量定义  

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

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

Swift在控制流语法中最大的特色是:包裹条件和循环变量括号可以省略,但内容体的大括号是必须的。比如:
var salarys = [5000,10000,15000,20000]
for salary in salarys
{
    if salary > 15000
    {
        println("有钱淫~")
    }
    else
    {
        println("穷屌丝~")
    }
}
可以看到if的条件部分可以不用(),另外if的条件语句必须是Bool类型,如果把上述例子改为:
if salary
{
    println("有钱淫~")
}
则编译器会提示错误,注:println类似Objective-C的NSLog()。
再讲一下Switch语句,Swift中的Switch语句支持任意类型的数据——不仅仅是整数哦,另外switch中每个case不需要在末尾加break,只要执行了一个case后自动跳出,不会依次往下执行,例子代码如下:
let today = "Friday"
switch today
{
    case "Monday":
        println("fuck day!")
    case "Friday":
        println("nice day!")
    default:
        println("fighting day!")
}
while循环没什么特殊的就不赘述了~

  4、函数

swift用func来定义函数,函数原型为:func 函数名(参数1,参数2...) -> 返回类型,示例代码如下:
func whoami() -> String
{
    return "***"
}
函数原型:func 函数名(参数1,参数2...) -> 返回类型
func join(s1: String, s2: String, joiner: String) -> String 
{    return s1 + joiner + s2
}
join("hello", "world", ", ")
// returns "hello, world "

外部参数名 func join(string s1: String, toString s2: String, withJoiner joiner: String) -> String { return s1 + joiner + s2 } join(string: "hello", toString: "world", withJoiner: ", ") // returns "hello, world“

Shorthand 外部参数名 func join(#string: String, #toString: String, #withJoiner : String) -> String { return string + toString + withJoiner } join(string: "hello", toString: "world", withJoiner: ", ")
默认参数值 func join(
string s1: String, toString s2: String,withJoiner joiner: String = " ") -> String { return s1 + joiner + s2 } join(string: "hello", toString: "world", withJoiner: "-") // returns "hello-world " join(string: "hello", toString: "world") // returns "hello world "

  5、元组

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

  6、类和对象  

swift中类用class来定义,类中的变量和方法与普通的变量与函数定义一致,没什么区别,对象就用类名+构造方法生成,例子代码如下:
类定义
class ClassName{}
class Car
{
     var name:String
     init(name:String)
     {
          self.name = name
    }
    func carName() ->String
    {
          return name
     }
}
var domesticCar = Car(name: "BYD")
println(domesticCar.carName())
//prints:"BYD”

  7、初始化

Designated&Convenience
init(parameters) 
{    
    statements
}
convenience init(parameters) 
{   
    statements
}
Swift轻松入门——基本语法介绍和详细地Demo讲解(利用WebView打开百度、新浪等网页)

  8、属性

Stored Properties & Computed Properties
class Car
{     var name:String    
      var carName:String{        
      get{  return name; }        
      set(newName){   name = newName  }    
     }    
     init(name:String)    
    {        
           self.name = name    
     }
}
var domesticCar = Car(name: "BYD")
var name = domesticCar.carName
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[0]) as! String
6 表示把value强制转换为String类型。

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

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

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

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

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

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

下面来讲解实现部分:

1、界面实现:

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

Swift轻松入门——基本语法介绍和详细地Demo讲解(利用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 1
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[0] 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[0]) 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(20, 100, 400, 200))
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 = 0
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”文档。

祝大家玩的开心!!!!

 


推荐阅读
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • 前一篇文章中,我们大致的讲述了一下JavaScriptCore这个库在iOS开发中的应用。在文中最后的阶段,我们提到了简单的来说,在最开始的UIWebView时,原生跟JS之间的交互一般是两种方式:当然这个其实也就是 ... [详细]
author-avatar
幸福-一路向南_654
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有