log输出与变量引用

var name = "dylan"
print("我的名字是\(name)")

可选类型Optionals

一般用于表示变量可能为nil,因为nil也是一种类型
其中int?等价于Optional[int]

import Cocoa

var myString:String? = nil
//或者var myString:Optional[String] = nil

if myString != nil {
    print(myString)
}else{
    print("字符串为 nil")
}

let与var

let 表示常量,var 表示变量

let constA = 42
let constB:String = "let means const"
var str = "var like auto in C++ 11"

字符串

  • 可以像lua那样,用+连接
  • 计算长度String.characters.count
var str = String("I am")
var str2 = "dylan"
var resultStr = str + str2
print ("最终字符串为:"+resultStr+",长度为\(resultStr.characters.count)")
  • 可以用==来比较
  • 可以用forin来遍历字符串中的字符
import Cocoa

for ch in "Hello".characters {
   print(ch)
}

输出

H
e
l
l
o
  • 通过append连接字符
import Cocoa

var varA:String = "Hello "
let varB:Character = "G"

varA.append( varB )

print("varC  =  \(varA)")

输出

varC  =  Hello G

字典容器

  • 初始化
定义空字典:
var someDict = [Int: String]()
定义并初始化:
var someDict:[Int:String] = [1:"str1",2:"str2"];
  • 修改
修改字典,以下两种方法等价:
someDict[2]="newValue"
someDict.updateValue("newValue",forKey:2)
  • 移除kv对
以下两种方法等价
someDict[1]=nil
someDict.removeValueForKey(2)
  • 遍历
for (key,value) in someDict{
    print("key:\(key),value:\(value)")
}

数组容器

创建数据

创建空数组
var someArray = [Int]()

创建初始值为0,5个成员的数组
var someArray = [Int](count:5,repeatedValue:0)

创建指定内容数组
var someArray = [1,2,3,4,3]

修改内容

someArray[1]=2

末尾添加

someArray.append(6)
等价于
someArray +=[6]

函数

定义函数

import Cocoa

func output(name: String) -> String {
    return "my name is" + name
}
print(output("dylan"))

使用元组返回多个值,元组接近数组,元素可以是任意值,使用圆括号

import Cocoa

func output(name:String,age:Int) -> (nameStr:String,ageStr:String){
    
    return ("my name is"+name,"my age is"+age)
}

没有返回值与没有参数的函数

import Cocoa

func nowYouSee(){
    print("what ever")
}

定义外部参数名

func createUser(Name name:String,Tel tel:String){
    print("creat user:\(name) with tel:\(tel)")
}

createUser(Name:"dylan",Tel:"13838380383")
//必须使用Name,Tel来传递参数

参数引用

swift中称为io参数,使用inout修饰的参数为引用参数
函数内修改会影响外部
func swap(inout a:Int,inout b:Int){
    let t = a
    a = b
    b = t
}    

闭包

类似匿名函数,下面是一个接收两个参数,返回int型的闭包

import Cocoa

let divide = {(val1: Int, val2: Int) -> Int in 
   return val1 / val2 
}
let result = divide(200, 20)
print (result)

输出:10

闭包可以当作参数,也可以当作返回值
以下函数makeIncrementor返回一个无参数,返回值为Int的闭包函数

func makeIncrementor(amount: Int)-> () -> Int{
     var runningTotal = 0
    func incrementor() -> Int {
        runningTotal += amount
        return runningTotal
    }
    return incrementor
}
let incrementByTen = makeIncrementor(forIncrement: 10)

print(incrementByTen())
//输出10

print(incrementByTen())
//输出20

枚举

定义一个枚举,注意不用逗号分隔

enum Week{
    case Sunday
    case Monday
    case Tuesday
    case wednesday
    case thursday
    case friday
    case saturday
}

可以有不同类型

enum Student{
    case Name(String)
    case age(Int)
}

变量确定类型后,可以省略为枚举名调用

var day = Week.Sunday
day = .friday

switch day{
    case .Sunday:
        print("sunday")
    case .Monday:
        print("monday")
}

枚举不默认值为0,但是明文设置整型后会递增

enum Month:Int{
    case January = 1,February, March, April, May, June, July, August, September, October, November, December
}
print("数字月份:\(Month.May.rawValue)")

输出
数字月份为:5

结构体

结构体为值传递,不是引用传递,可以在里面设置init方法,内部调用为self

struct student{
    var name: String
    var age: Int
    var sex: String
    init(mName: String,mAge: Int,mSex: String){
        self.name = mName
        self.age = mAge
        self.sex = mSex
    }
}
var s1 = student(mName:"dylan",mAge:18,mSex:"secret")
var s2  = s1
s1.age = 17
print(s1.age)
print(s2.age)
//输出17,18

标签: Swift, Objective-C, 区别, 从Objective-C到Swift

添加新评论