闲来无事,看的例子还是觉得自己先敲一遍,印象会深刻些!例子涉及的都是swift简单的语法。
基本练习
var str = "Hello, playground"
var cc: Int?
cc = 100
let ccc: Int = 200;
let z = cc!+ccc
print("cc===\(cc)ccc===\(z)")
let y = "30";
let yy = Int(y);
print("yy==\(yy)")
var kj: String?
if let newkj = kj{
var kjj = kj!+"jfkjkd"
}else{
print("kj===\(kj)")
}
var age: Int! = 0
var agee = age+100
if let newage = age{
print("agee=\(agee)")
}
``` bash
### ...用法
for i in 1..<100{
print("i=\(i)")
}
var strr = "hello world"
var range = "a"..."z"
for t in strr.characters{
if range.contains(String(t)){
print(t)
}
}
``` bash
### 分支语句
var lista = ["a","b","c","d","e","f"]
let bb = lista[1]
switch bb {
case "a","b":
print("b=a")
default:
break
}
``` bash
### 闭包
func sum(num1 num1:Int,num2:Int) -> Int{
return num1+num2
}
sum(num1: 100, num2: 200)
func add() -> ()->Int{
var total = 0
var step = 1
func fn()->Int{
total+=step
return total
}
return fn
}
print(add())
``` bash
### 类
class Person {
var name:String?
init(name:String){
self.name = name
}
deinit{
print("die")
}
func showMessage(content: String){
print("my name is \(self.name)+\(content)")
}
}
var p = Person(name: "gh")
p.showMessage("are you ok")
var p2 = p
p2.name = "wx"
p2.showMessage("not")
if p === p2 {
print("the same")
}
``` bash
### 属性
class Account {
var balance:Double = 0.0{
willSet{
self.balance = 2.0
print("willset.balance,newvalue=\(newValue) value=\ (self.balance)")
}
didSet{
self.balance = 3.0
print("didset.balance,newvalue=\(oldValue) value=\ (self.balance)")
}
}
}
class Personn {
//存储属性
var firstName:String
var lastName:String
let age:Int
init(first:String,last:String){
self.firstName = first
self.lastName = last
age = 28
}
//计算属性
//计算属性并不直接存储一个值,而是提供getter来获取一个值,或者利用setter来间接设置其他属性;
// lazy属性必须有初始值,必须是变量不能是常量(因为常量在构造完成之前就已经确定了值);
//在构造方法之前存储属性必须有值,无论是变量属性(var修饰)还是常量属性(let修饰)这个值既可以在属性创建时指定也可以在构造方法内指定;
var fullName:String{
get
{
return self.firstName+"."+self.lastName
}
set
{
print("newValue===\(newValue)")
}
}
lazy var acc = Account()
func showMessage(){
print("name=\(self.fullName)")
}
//类属性
static var skin:[String]{
return ["yellow","white","black"]
}
class func classMethod(){
print("class method")
}
final func sayHello(){
//子类无法重载
}
}
var pn = Personn(first: "wang", last: "guohui")
pn.acc.balance = 100
pn.showMessage()
Personn.classMethod()
for color in Personn.skin{
print(color)
}
class Student: Personn {
override func showMessage() {
print("student===\(self.firstName).\(self.lastName)")
}
override var fullName:String{
get{
return super.fullName
}
set{
}
}
}
var s = Student(first: "xiao", last: "ming")
s.showMessage()
``` bash
### 协议
protocol Named{
var name:String {get set}
static var className:String{get}
init(name:String)
func showName()
static func showClassName()
}
protocol Scored{
var score:Double{get set}
}
class Person2: Named {
var name:String
var age:Int = 0
static var className:String{
return "Person2"
}
required init(name: String) {
self.name = name
}
func showName() {
print("name=\(self.name)")
}
static func showClassName() {
print("Class name is Person2")
}
}
class Student2: Person2,Scored {
var score:Double = 0.0
init(name: String, score:Double) {
self.score = score;
super.init(name: name)
}
required init(name:String){
super.init(name:name)
}
func test(){
print("\(self.name) is testing.")
}
}
var p22 = Person2(name: "Kenshin Cui")
p22.showName()
print("classname=\(Person2.className)")
Person2.showClassName()
p22.age = 30
var s22 = Student2(name: "Kaoru", score: 100)
s22.showName()
let b1 = s22 is Scored
if b1{
print("s22 has score property")
}
if let s33 = s22 as? Scored{
print("s33 score is\(s33.score)")
}
let s44 = s22 as Scored
print("s44 score is\(s44.score)")
``` bash
### 扩展
extension Person{
//只能扩展便利构造器
convenience init(){
self.init()
}
//只能扩展计算属性
var personInfo:String{
return "firstname"
}
//扩展实例方法
func sayGreet(){
print("say hello")
}
//嵌套类型
enum Hoppy{
case Reading,Swimming,Sing
}
//扩展类型方法
static func hoppy() -> [Hoppy]{
return [.Reading,.Swimming,.Sing]
}
}
var pex = Person(name: "xiao hua")
pex.sayGreet()
Person.hoppy()
``` bash
### 结构体
struct World{
var name:String
var child:String
var intro:String{
return "a beautilully"
}
func showMessage(){
print(name+" "+child)
}
static func showStructName(){
print("world")
}
}
var w = World(name: "earth", child: "china")
w.showMessage()
World.showStructName()
var w2 = w
w2.name = "earth2"
w2.child = "amera"
w2.showMessage()
w.showMessage()
``` bash
### 枚举
enum Season:Int{
case Spring = 10
case Summer
case Autumn
case Winter
}
var sen = Season.Spring
switch sen {
case .Spring:
print("spring")
case .Summer:
print("summer")
case .Autumn:
print("autumn")
default:
print("winter")
}
var sum = Season.Summer
print("summer=\(sum)")
## 2.0 新特性
``` bash
### 异常处理
enum WechatError: ErrorType{
case NoBattery
case NoNetwork
case NoDataStream
}
class STwo {
func check(person:[String:String]){
guard let id = person["id"] else {
print("没有身份证,不得进场")
return
}
guard let exam = person["exam"] else{
print("没有准考证,不得进场")
return
}
print("身份证:\(id),准考证\(exam)")
if #available(iOS 8,*){
print("ios 8 +")
}else{
print("ios8 -")
}
var i = 0
repeat {
i++
print(i)
}while i < 100
}
func checkIsWeChatOk(isPhoneHasBattery:Bool,isPhoneHasNetwork:Bool,dataStream:Int) throws{
guard isPhoneHasBattery else{
throw WechatError.NoBattery
}
guard isPhoneHasNetwork else{
throw WechatError.NoNetwork
}
guard dataStream > 50 else{
throw WechatError.NoDataStream
}
}
func playWechat(isPhoneHasBattery:Bool,isPhoneHasNewwork:Bool,dataSteam:Int){
do{
try checkIsWeChatOk(isPhoneHasBattery, isPhoneHasNetwork: isPhoneHasNewwork, dataStream: dataSteam)
print("没有异常,every ok")
}catch WechatError.NoBattery{
print("没电了")
}catch WechatError.NoNetwork{
print("没网了")
}catch WechatError.NoDataStream{
print("没流量了")
}catch{
print("见鬼了")
}
}
}
var tt = STwo()
tt.check(["id":"1234"])
tt.check(["exam":"4321"])
tt.check(["id":"1234","exam":"4321"])
tt.playWechat(true, isPhoneHasNewwork: true, dataSteam: 25)
``` bash
### Block
typealias funcBlock = () -> ()//无参无返回值
typealias funcBlockA = (Int,Int) -> String
typealias funcBlockB = (Int,Int) -> (String) -> Void //返回值是函数指针
typealias funcBlockC = (Int,Int) -> (String) -> String
class blockDemo {
var blockPropertyNo:funcBlock = {print("no return exec")}
var blockProperty:funcBlockA = {a,b in return String(a+b)}
var blockPropertyA:funcBlockA?
var blockPropertyB:funcBlockB!
init(){
}
}