ios -- 教你如何轻松学习Swift语法(二)
var name : Optional<String> = nil
var name : String? = nil
name = Optional("why")
name = "why" // 系统会对字符串进行包装Optional, 再进行赋值
print(name!)
if let name = name {
print(name)
print(name)
}

let urlString = "www.baidu.com" let url : NSURL? = NSURL(string: urlString)
if let url = url {
let request = NSURLRequest(URL: url)
}
let path = NSBundle.mainBundle().pathForResource("123.plist", ofType: nil)
if let path = path {
NSArray(contentsOfFile:path)
}
//1.is的使用
let infoArray = ["why" , , 1.98]
let item = infoArray[] //item.isKindOfClass(UIButton.self) //string是结构体,不能用isKindOfClass
if item is String {
print("是字符串")
}else {
print("不是字符串")
}
let urlString = "www.baidu.com"
(urlString as NSString).substringToIndex()
let item1 = infoArray[]
let name = item1 as? String
if let name = name {
print(name.characters.count)
}
简写:
if let name = infoArray[] as? String {
print(name.characters.count)
}
let count = (infoArray[] as! String).characters.count
}


// 函数的嵌套
let value =
func test() {
func demo() {
print("demo \(value)")
}
print("test")
demo()
}
demo() // 错误 必须在对应的作用域内调用
test() // 执行函数会先打印'test',再打印'demo'
// 定义两个函数
func addTwoInts(a : Int, b : Int) -> Int {
return a + b
} func multiplyTwoInt(a : Int, b : Int) -> Int {
return a * b
}
// 定义函数的类型
var mathFunction : (Int, Int) -> Int = addTwoInts // 使用函数的名称
mathFunction(, ) // 给函数的标识符赋值其他值
mathFunction = multiplyTwoInt // 使用函数的名称
mathFunction(, )
// 3.将函数的类型作为方法的参数
func printResult(a : Int, b : Int, calculateMethod : (Int, Int) -> Int) {
print(calculateMethod(a, b))
} printResult(, b: , calculateMethod: addTwoInts)
printResult(, b: , calculateMethod: multiplyTwoInt)
// 1.定义两个函数
func stepForward(num : Int) -> Int {
return num +
} func stepBackward(num : Int) -> Int {
return num -
} // 2.定义一个变量,希望该变量经过计算得到0
var num = - // 3.定义获取哪一个函数
func getOprationMethod(num : Int) -> (Int) -> Int {
return num <= ? stepForward : stepBackward
} // 4.for循环进行操作
while num != {
let oprationMethod = getOprationMethod(num)
num = oprationMethod(num)
print(num)
}
enum <#name#> {
case <#case#>
}
enum Planet {
case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}
enum Direction : Int{
case East = , West , North , Sourth
}
//完整写法
let d : Direction = Direction.North
//简单写法:根据上下文能推导出确定的类型
var d1 = Direction.East
d1 = .West
//枚举类型的使用
let btn = UIButton(type: .Custom)
let btn = UIButton(type: .Custom)
enum Direction : String{
case East = ""
case West = ""
case North = ""
case Sourth = ""
}
var b : Direction = .West
let a = Direction(rawValue: “”)
enum Direction2 : Int{
case East = , West , North , Sourth
//只要给第一个成员赋值,会自动按照递增的方式给后面的成员赋值
//相当于 West = 2, North = 3, Sourth = 4
//注意:这种赋值方法只对整型有效,赋值其它类型无效
struct 结构体名称 {
// 属性和方法

class 类名 : SuperClass {
// 定义属性和方法
}
class Person {
var name : String = ""
var age : Int =
}
let p = Person()
p.name = "lkj"
p.age =
class Person {
var name : String
var age : Int
// 自定义构造函数,会覆盖init()函数
init(name : String, age : Int) {
// 如果在一个方法中, 属性名称产生了歧义(重名), self.不可以省略
self.name = name
self.age = age
}
}
// 创建一个Person对象
let p = Person(name: "why", age: )
class Person: NSObject {
var name : String
var age : Int
// 重写了NSObject(父类)的构造方法 在init前面加上override
override init() {
name = ""
age =
}
}
// 创建一个Person对象
let p = Person()
class Person: NSObject {
// 结构体或者类的类型,必须是可选类型.因为不能保证一定会赋值
var name : String?
// 基本数据类型不能是可选类型,否则KVC无法转化
var age : Int =
// 自定义构造函数,会覆盖init()函数
init(dict : [String : NSObject]) {
// 必须先初始化对象
super.init()
// 调用对象的KVC方法字典转模型
setValuesForKeysWithDictionary(dict)
}
//如果字典中某些键值对,在类中找不到对应的属性,就会报错
//不想让它报错,可以重写setValue forUndefinedKey key:
override func setValue(value: AnyObject?, forUndefinedKey key: String) {
}
}
// 创建一个Person对象
let dict = ["name" : "why", "age" : ]
let p = Person(dict: dict)
deinit {
// 执行析构过程
}
class Person {
var name : String
var age : Int
init(name : String, age : Int) {
self.name = name
self.age = age
}
deinit {
print("Person-deinit")
}
}
var p : Person? = Person(name: "why", age: )
p = nil
ios -- 教你如何轻松学习Swift语法(二)的更多相关文章
- ios -- 教你如何轻松学习Swift语法(一)
目前随着公司开发模式的变更,swift也显得越发重要,相对来说,swift语言更加简洁,严谨.但对于我来说,感觉swift细节的处理很繁琐,可能是还没适应的缘故吧.基本每写一句代码,都要对变量的数据类 ...
- ios -- 教你如何轻松学习Swift语法(三) 完结篇
前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦. 一.自动引用计数 1.自动引用计数工作机制 1.1 swift和o ...
- 一步一步学习Swift之(二):好玩的工具playground与swfit基础语法
playground好于在于能一边写代码一边看到输出的常量变量的值.不需要运行模拟器. 我们来试一下该工具的用法. 打开xcode6开发工具,选择Get started with a playgrou ...
- IOS之Foundation之探究学习Swift实用基础整理<一>
import Foundation //加载网络数据,查找数据的字符串 let dataurl = "http://api.k780.com:88/?app=weather.city& ...
- JavaScript学习笔记--语法二
条件判断与C语言一样 两种循环.for 循环和 while 循环,JavaScript不区分整数和浮点数,统一用Number表示,所以不是 int i var x = 0; var i; for (i ...
- 轻松学习JavaScript十二:JavaScript基于面向对象之创建对象(二)
四原型方式 我们创建的每一个函数都有一个通过prototype(原型)属性.这个属性是一个对象,它的用途是包括能够由特定类型 的全部实例共享的属性和方法. 逻辑上能够这么理解:prototypt通过条 ...
- 轻松学习JavaScript十二:JavaScript基于面向对象之创建对象(一)
这一次我们深入的学习一下JavaScript面向对象技术,在学习之前,必要的说明一下一些面向对象的一些术语. 这也是全部面对对象语言所拥有的共同点.有这样几个面向对象术语: 对象 ECMA-262把对 ...
- 轻松学习Ionic (二) 为Android项目集成Crosswalk(更新官方命令行工具)
现在集成crosswalk不用这么麻烦了!官方的命令行工具已经能让我们一步到位,省去很多工作,只需在cmd中进入项目所在目录(不能有中文目录,还得FQ),执行: ionic browser a ...
- less学习-语法(二)
变量 @color1:#fff; 选择器 // Variables @mySelector: banner; // Usage .@{mySelector} { font-weight: bold; ...
随机推荐
- jquery 动画效果插件
从jQuery API 文档中可以知道,jQuery自定义动画的函数.animate( properties [, duration] [, easing] [, complete] )有四个参数: ...
- BZOJ 1179 Atm 题解
BZOJ 1179 Atm 题解 SPFA Algorithm Tarjan Algorithm Description Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来 ...
- 【noiOJ】p1794
t1794:集合加法 查看 提交 统计 提问 总时间限制: 3000ms 内存限制: 65536kB 描述 给出2个正整数集合A = {pi | 1 <= i <= a},B = {q ...
- linux 下如何打开core dump文件开关
dump文件可以在程序crash时,方便我们查看程序crash的地方和上下文信息.在window下,要能生成dump文件,需要自己编写相应的代码.不过现在网上可以找到相应的代码,只要把它下载后然后加到 ...
- ThinkPHP3.2.3--Linux服务器首页文件index.php路径配置问题
在windows服务器环境下,可以define ('SITE_URL','http://192.168.1.101/'); 但上传到linux服务器环境下不能正常解析,可使用相对路径:define ( ...
- linux共享内存实验
顾名思义,消息队列就是一些消息的列表,用户可以在消息队列中添加消息和读取消息等.从这点上看,消息队列具有一定的FIFO特性,但是它可以实现消息的随机查询,比FIFO具有更大的优势.同时,这些消息又是存 ...
- Node.js执行存储过程
直接上代码 var sql = require('mssql'); var config = { user: 'sa', password: '123456', server: ...
- HDU1063 大数 java
Exponentiation Time Limit: 2000/500 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- Greenplum 生成加分区语句
在使用greenplum中会使用分区表,但同时分区表需要维护分区:比如加分区,这个过程比较痛苦,查询相关资料以后有了相应的解决办法,但是该办法也不是万能的,有诸多限制,关于限制有兴趣的同学可以查看我文 ...
- 使用context来传递数据,一个context是一系列变量
页面设计工作和python代码分离,所以我们引用模板来实现这个功能. 一.模板实例 下面是一个模板的实例: [python]<html><head><title>O ...