转载请务必注明出处(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 = ,那么pi就是int类型,那我想让pi变为float类型该怎么办呢?我们只需在声明的时候显示地制定类型就可以了,比如var pi:Float = ,此时pi就是float类型了
2、数组、字典定义
数组、字典用[]来定义,可以用下标或键(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”
,如果要创建空的数组或者字典,就需要使用初始化语法,比如var animals = [String]()
var webSites = [Dictionary<String,String>].self
3、控制流if、switch、for-in、while
Swift在控制流语法中最大的特色是:包裹条件和循环变量括号可以省略,但内容体的大括号是必须的。比如:
var salarys = [,,,]
for salary in salarys
{
if salary >
{
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: , 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
}
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
swift中如果在声明一个变量时不手动初始化,swift不会为该变量自动赋一个默认值,但对于Optinal的变量则不同,Optinal类型的变量如果没初始化,则swift自动会为该变量赋为nil。那怎么声明一个Optional变量呢?只要在声明时在类型后面加上? 或者!就行了,比如
var urlRequest:NSURLRequest? //urlRequest == nil
而?和!的区别就是:?表示该变量可能为nil也可能不为nil,而!则表示该变量肯定不为nil。
另外as表示类型转换,比如
webAddress = item.objectForKey(webName[]) as! String
表示把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源码如下:(看注释就能明白了)
//
// ViewController.swift
// XSurfing
//
// Created by huixinming on 6/24/15.
// Copyright (c) 2015 huixinming. All rights reserved.
// //引入相关头文件
import UIKit
import Foundation class ViewController: UITableViewController {
//创建相关网站字典模型
let baidu = ["百度":"http://www.baidu.com"]
let sina = ["新浪":"http://sina.com"]
let phoenix = ["凤凰网":"http://www.ifeng.com"]
//用于存储需要显示的网站
var webSites:NSMutableArray
//选择的网址,默认是百度
var webAddress:String = "http://www.baidu.com"
//storyboard创建controller必须要实现的初始化方法,可以在此处给成员变量赋初值
required init!(coder aDecoder: NSCoder!) {
//把要显示的网站添加进来,有个疑问是:在该方法中super.init方法必须在初始化完子类的成员变量后才能调用
webSites = [baidu,sina,phoenix]
super.init(coder: aDecoder)
}
//覆盖父类的相关方法
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//设置该ViewController的title和根View的背景色
self.navigationItem.title = "XSuring"
self.view.backgroundColor = UIColor.redColor()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//覆盖UITableView的相关delegate方法
override func numberOfSectionsInTableView(tableView: UITableView) -> Int
{
return
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
//返回要显示的行数
return webSites.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
//设置cell的相关显示
let cellIdentifier:String = "webCell"
var cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as! UITableViewCell
var row = indexPath.row
var item = webSites[row] as! NSDictionary
var webName:NSArray = item.allKeys
cell.textLabel?.text = webName[] as? String
return cell
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
var row = indexPath.row
var item = webSites[row] as! NSDictionary
var webName:NSArray = item.allKeys as NSArray
webAddress = item.objectForKey(webName[]) as! String
//点击时跳转到“网页内容显示界面,showDetailWebContent是storyboard segue identifier”
self.performSegueWithIdentifier("showDetailWebContent", sender: self)
}
//把选中的网站url传递给“网页内容显示controller”
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
var webViewController = segue.destinationViewController as! WebViewController
webViewController.detailURL = webAddress
}
}
“网页内容显示”ViewController源码如下:(看注释就能明白了)
//
// WebViewController.swift
// XSurfing
//
// Created by huixinming on 6/26/15.
// Copyright (c) 2015 huixinming. All rights reserved.
//
import UIKit
import Foundation class WebViewController: UIViewController,UIWebViewDelegate {
@IBOutlet weak var webView: UIWebView!
var tipLabel:UILabel
var loading:UIActivityIndicatorView
//需要加在的url,默认是百度
var detailURL:String = "http//www.baidu.com"
var urlRequest:NSURLRequest?
required init(coder aDecoder: NSCoder) {
//初始化提示语和加载框
tipLabel = UILabel(frame: CGRectMake(, , , ))
loading = UIActivityIndicatorView(activityIndicatorStyle:.Gray)
super.init(coder: aDecoder)
}
override func viewDidLoad() {
super.viewDidLoad()
//构建url请求对象
var url = NSURL(string: detailURL)
urlRequest = NSURLRequest(URL: url!)
webView.loadRequest(urlRequest!)
//把webview的委托设为自己
webView.delegate = self
tipLabel.backgroundColor = UIColor.clearColor()
tipLabel.numberOfLines =
webView.scrollView.addSubview(loading)
loading.center = webView.center
}
func webViewDidStartLoad(webView: UIWebView)
{
//开始加载网页时显示loading框
loading.startAnimating()
}
func webViewDidFinishLoad(webView: UIWebView)
{
//当网页加载完成后,消失loading框和提示语
loading.stopAnimating()
tipLabel.removeFromSuperview()
}
func webView(webView: UIWebView, didFailLoadWithError error: NSError)
{
//当网页加载失败时,消失loading框,显示提示语
loading.stopAnimating()
tipLabel.text = "ERROR!"
view.addSubview(tipLabel)
}
}
啊~~终于完了,相信聪明的你看到这儿应该会用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打开百度、新浪等网页)的更多相关文章
-
flex弹性布局语法介绍及使用
一.语法介绍 Flex布局(弹性布局) ,一种新的布局解决方案 可简单.快速的实现网页布局 目前市面浏览器已全部支持1.指定容器为flex布局 display: flex; Webkit内核的浏览器, ...
-
Swift翻译之-Swift语法入门 Swift语法介绍
目录[-] Hello world - Swift 简单赋值 控制流 函数与闭包 对象和类 枚举与结构 协议和扩展 泛型 2014.6.3日,苹果公布最新编程语言Swift,Swift是一种新的编程语 ...
-
一、vue基础语法(轻松入门vue)
轻松入门vue系列 Vue基础语法 一.HelloWord 二.MVVM设计思想 三.指令 1. v-cloak 2. v-text 3. v-html 4. v-show 4. v-pre 5. v ...
-
freemarker语法介绍及其入门教程实例
# freemarker语法介绍及其入门教程实例 # ## FreeMarker标签使用 #####一.FreeMarker模板文件主要有4个部分组成</br>#### 1.文本,直接输 ...
-
C++ STL编程轻松入门基础
C++ STL编程轻松入门基础 1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL 1.2 追根溯源:STL的历史 1.3 千丝万缕的联系 1.4 STL的不同实现版本 2 牛刀小试 ...
-
Apple Swift编程语言入门教程
Apple Swift编程语言入门教程 作者: 日期: 布衣君子 2015.09.22 目录 1 简介 2 Swift入门 3 简单值 4 控制流 5 函数与闭包 6 对象与类 ...
-
Groovy轻松入门——通过与Java的比较,迅速掌握Groovy (更新于2008.10.18)
摘自: http://www.blogjava.net/BlueSUN/archive/2007/03/10/103014.html Groovy轻松入门--通过与Java的比较,迅速掌握Groovy ...
-
[转]Swift 编程语言入门教程
今天在网上看到一篇非常好的教程,分享给大家 原文地址:http://gashero.iteye.com/blog/2075324 目录 1 简介 2 Swift入门 3 简单值 4 控 ...
-
Apple Swift编程语言入门
1 简单介绍 今天凌晨Apple刚刚公布了Swift编程语言,本文从其公布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的iOS&a ...
随机推荐
-
WPF入门:数据绑定
上一篇我们将XAML大概做了个了解 ,这篇将继续学习WPF数据绑定的相关内容 数据源与控件的Binding Binding作为数据传送UI的通道,通过INotityPropertyChanged接口的 ...
-
ActiveMQ的介绍及使用实例.
今天就来说下 这个项目中使用ActiveMQ的情况, MQ: message queue, 顾名思义就是消息队列的意思. 一: 使用场景: 消息队列在大型电子商务类网站,如京东.淘宝.去哪儿等网站有 ...
-
修复 XE8 for Android 方向传感器 headingX,Y,Z 不会动的问题
问题:XE8 for Android 方向传感器无法正常运作(在 XE7 是正常的) 测试:官方示例 Samples\Object Pascal\Mobile Snippets\Orientation ...
-
转:如何学习javascript
ps:每过一段时间就会发觉自己懂的越来越少,打开编辑器的时候不知道从何入手.兴许是过于急于求成,总没有系统地去对这门语言进行学习,囫囵吞枣,只想着能够解决工作需求.是时候让自己重新出发,从零开始,一页 ...
-
POJ2104 K-th Number Range Tree
又是区间第k大,这次选择这道题是为以后写线段树套平衡树铺路的.Range Tree可以理解成线段树套vector吧,相当于每个结点多存了对应区间的一个排好序的序列.画一下就会知道空间的消耗是nlogn ...
-
【Linux高频命令专题(21)】df
概述 linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 显示指定磁盘文件的可用空间.如果没有文件名 ...
-
Linux分区规划与xshell使用排错
1.1 没有重要数据 /boot 200M 存放系统的引导信息 内核 swap 交换分区 防止内存用光了 临时的一个内存 如果你的内存小于8G swap是内存的1.5倍 如果你的 ...
-
web路径问题相对路径和绝对路径,计算机相对路径和绝对路径
**首先得明白相对路径和绝对路径的概念和区别:****相对路径:**相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系.使用相对路径可以为我们带来非常多的便利.([百度百科])* ...
-
Next K Permutation
3457: Next K Permutation 时间限制: 1 Sec 内存限制: 128 MB提交: 4 解决: 4[提交] [状态] [讨论版] [命题人:admin] 题目描述 n 个数有 ...
-
andorid人员文件上传服务器的搭建(tomcat中)
1.将.war文件复制到tomcat服务器webapps下,启动服务器即可 2.访问工程路径http://localhost:8080/FileUpload/index.jsp即可测试上传 3.测试成 ...