变量和常量
var a : int //变量
let b = 10 //常量
在Swift中,任何变量的定义,都是用var或者let来定义,var和let的区别在与,var定义的变量,是可以修改内容的,let定义的不能,是属于常量。当然,如果你定义的类型错了,编译时会提示你的。
Swift的输出函数为:
print()
for循环遍历
方式一
for i in 0...100 {
print(i)
}
方式二
for i in 0 ..< 100{
print(i)
}
倒叙遍历
for i in (0...100).reversed() {
print(i)
}
基本数据类型运算
let a = 20
let b = 30
let c = a+b
注意:只有相同数据类型的对象,才能直接运算。+ - * / % 分别对应加,减,乘,除,取余
基本数据类型转换
let a = 10
let b = 20.9
let c = a + Int(b)
由于不同数据类型之间不能直接运算,所以这时需要转换数据类型
?和!的区别
?表示可选类型,其值可以为空
!表示必有值,为空时会crash
属性的定义
格式:
var a : Int?;
var b = float();
以上两种,第一种定义方式,是定义了一个可选类型的变量a,其初始值为空,第二种情况,是定义了一个有值的变量b。
方法的定义
实例方法
func name(str:String) -> Void {
}
使用func 定义方法名,参数,返回值
类方法
class func name(str:String) -> Void {
}
在实例方法前加一个class即可
方法和属性的调用
属性和实例方法全部 使用点语法调用
如:
let p = Person.init()
p.name 属性
类方法的调用
类名使用点语法调用
Person.name
属性的set和get方法
var _studtwo : NSInteger?
var studtwo: NSInteger {
get {
return _studtwo!;
}
set {
_studtwo = newValue
}
}
懒加载的定义
lazy var stdioff: NSInteger = {
return 300;
}()
String
定义
var str:String?
str = String.init()
str = "Swi"
拼接
str = str! + "f"
str = String.init(format: "%@%@", str!,"t")
str?.append("3.0")
获取长度
let length = str?.characters.count
获取到字符串的某个位置
let someIndex = str?.index((str?.startIndex)!, offsetBy: 5)
截取字符串
let formStr = str?.substring(from: someIndex!)
let toStr = str?.substring(to: someIndex!)
将String转化为NSString再截取
let ns3=(str! as NSString).substring(with: NSMakeRange(4, 2))
移除指定位置的字符,并返回移除的字符
let char = str?.remove(at: someIndex!)
插入字符串
str?.insert("d", at: someIndex!)
移除所有字符
str?.removeAll();
全部大写,全部小写
str?.uppercased();
str?.lowercased();
str是否有内容
let isemp = str?.isEmpty;
替换字符或字符串全部替换
let place = str?.replacingOccurrences(of: "a", with: "w");
字符串转为数组
let charArr = str?.components(separatedBy: "a");
let strArr = str?.components(separatedBy: "zhang");
Array
定义
var arr:Array?;
arr = Array.init();
arr = ["bei","er","te","lun"];
个数
let count = arr?.count;
let endIndex = arr?.endIndex;
移除最后一个元素
arr?.popLast();
//替换
arr?[1] = "zhang";
拼接
arr?.append("kk");
插入
arr?.insert("ww", at: 0);
移除
arr?.remove(at: 1);
arr?.removeAll();
数组拼接成字符串
let str = arr?.joined(separator: "-");
排序 对当前数组进行排序
arr?.sort();
原数组不变,排序后生成一个新的数组
let sortArr = arr?.sorted();
数组为空的时候返回YES
let isEmp = arr?.isEmpty;
Dictionary
定义
var dic : Dictionary?;
dic = Dictionary.init();
dic = ["name":"beier","age":"23"];
删除
dic?.removeAll();
var value = dic?.removeValue(forKey: "name");
增加
dic?["name"] = "zhang";
更新
var valuel = dic?.updateValue("", forKey: "");
通过key找value
let keyV = dic?["name"];
取出字典中所有的key和value 数组类型
dic?.keys;
dic?.values;
元组
不多说,提一下
var orange = ["ddd",23,["name":"zhang"]] as [Any];
orange[2] = "zhangxianhong";
Data
定义
var data:Data?;
data = Data.init();
获取路径下的文件
try?Data.init(contentsOf: URL.init(string: "")!);
try?Data.init(contentsOf: URL.init(fileURLWithPath: ""));
写入url
data?.write(to: <#T##URL#>)
字符串转data
Data.init(base64Encoded: "zhang");
拼接其他data
data?.append(<#T##other: Data##Data#>)
拼接字节
data?.append(<#T##bytes:
UnsafePointer##UnsafePointer#>, count: <#T##Int#>)
Date
var date : Date?;
date = Date.init();
获取date到当前时间的时间戳
let nowTimeTape = date?.timeIntervalSinceNow;
获取date到1970年的时间戳
let timeTape = date?.timeIntervalSince1970;
昨天
let yesterDayDate = Date.init(timeIntervalSinceNow: 24*60*60);
未来的某个时间
Date.distantFuture;
远古的某个时间
Date.distantPast;
日期比较
yesterDayDate.compare(date!);
时间戳转化为Date
var tapDate = Date.init(timeIntervalSince1970: 1440000330);
格式化日期
var formatter = DateFormatter.init();
formatter.dateFormat = "yyyy/MM/dd HH:mm";
var formatterDate = formatter.string(from: date!);
时间字符串转为Date 转时dateFormat必须为yyyy-MM-dd HH:mm:ss格式
formatter.date(from: "");
View
UIView
funcviewL(){
//一般直接设置frame来初始化View
letview = UIView.init(frame:CGRect(x:100.0, y:100.0, width:100.0, height:100.0))
//背景颜色
view.backgroundColor=UIColor.black
//透明度
view.alpha = 1.0
//tag数值区分view的时候使用
view.tag = 100
//UIView继承于UIResponder是没有addTarget方法的,所有只能在UIView上添加手势UITapGestureRecognizer来实现点击事件。
//首先设定UIView(或其子类)为可交互的:
view.isUserInteractionEnabled=true
lettapGesture =UITapGestureRecognizer(target:self, action:#selector(tapGestureAction))
// 默认为单击触发事件
//设置手指个数:
tapGesture.numberOfTapsRequired = 1
view.addGestureRecognizer(tapGesture)
//添加view
self.view.addSubview(view)
}
//执行触发的方法:
//MARK:点击事件
functapGestureAction() {
print("view被点击了")
}
UILabel
func labelL() {
let label = UILabel(frame: CGRect(x: 20, y: 30, width: 100, height: 20))
label.text = "要展示的文本"
label.textColor = UIColor.green //字体颜色
label.font = UIFont.systemFont(ofSize: 12) //字体大小
label.textAlignment = .center //字体位置 剧中
label.numberOfLines = 1 //行数 可以写1 自动换行时写 0
label.lineBreakMode = .byTruncatingMiddle//文章过长省略方式
//文字大小自适应,自动改变大小
// label.adjustsFontSizeToFitWidth = true
//上边UIView有的属性UIlabel都有的,因为UIlabel继承UIView。
//富文本 NSFontAttributeName(字体大小,种类)
//NSForegroundColorAttributeName(字体颜色)
// NSBackgroundColorAttributeName(字体背景颜色)
let attributeString = NSMutableAttributedString(string: "文本")
attributeString.addAttribute(NSFontAttributeName, value: UIFont(name: "HelveticaNeue-Bold", size: 15)!,range: NSMakeRange(0,6))
attributeString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue, range: NSMakeRange(7, 14))
// attributeString.addAttribute(NSBackgroundColorAttributeName, value: UIColor.red, range: NSMakeRange(14, 25))
label.attributedText = attributeString
self.view.addSubview(label)
}
UIButton
func buttonL() {
let button:UIButton = UIButton(type:.system)
button.frame = CGRect(x:100,y:100,width:70,height:70)
button.setTitle("button标题", for:.normal)
button.setTitleColor(UIColor.green, for: .normal)
button.titleLabel?.font = UIFont.systemFont(ofSize: 14)
// button.backgroundColor = UIColor.yellow
let iconImage = UIImage(named:"图片名称")?.withRenderingMode(.alwaysOriginal)
button.setImage(iconImage, for: .normal)
//添加点击方法,方法是并存的
button.addTarget(self, action:#selector(tapped), for: .touchUpInside)
button.addTarget(self, action: #selector(tapbtn(_:)), for: .touchUpInside)
button.titleLabel?.lineBreakMode = .byTruncatingHead//省略文字开头,.byClipping直接将多余的截取掉,byWordWrapping自动换行
//当设置自动换行后(byWordWrapping 或 byCharWrapping),我们可以在设置 title 时通过 \n 进行手动换行
button.titleLabel?.lineBreakMode = .byWordWrapping
button.setTitle("开始\n学习swift了", for: .normal)
self.view.addSubview(button)
}
func tapped() {
print("点击")
}
func tapbtn(_ btn:UIButton) {
print("点击")
}
Controller
UIAlertViewController弹出框
func alertVC() {
let alertVC = UIAlertController(title:"提示", message:"是否继续",preferredStyle:.alert)//actionSheet
let alertaction = UIAlertAction(title:"cancel",style:.cancel,handler:nil)
let alertOK = UIAlertAction(title:"ok",style:.destructive,handler:{
action in
print("好的")
})
alertVC.addAction(alertOK)
alertVC.addAction(alertaction)
self.present(alertVC,animated: true)
}
提示框弹出2s后自动隐藏
func alertVC() {
let alertController = UIAlertController(title: "保存成功!",
message: nil, preferredStyle: .alert)
//显示提示框
self.present(alertController, animated: true, completion: nil)
//两秒钟后自动消失
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2.0) {
self.presentedViewController?.dismiss(animated: false, completion: nil)
}
}
弹框上添加textfield
alertController.addTextField {
(textField: UITextField!) -> Void in
textField.placeholder = "用户名"
}
alertController.addTextField {
(textField: UITextField!) -> Void in
textField.placeholder = "密码"
textField.isSecureTextEntry = true
}
UITableViewController
// LZTableViewController.swift
// LZSwift
//
// Created by luyongpeng on 2017/4/10.
// Copyright © 2017年 LonZh. All rights reserved.
//
import UIKit
import MJRefresh
class LZTableViewController: LZViewController,UITableViewDataSource,UITableViewDelegate {
let LZTableView = UITableView()
var currentPage = 1
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
LZTableView.frame = CGRect(x:0, y:0, width:LZSCREENH, height:LZSCREENH-64)
self.view = LZTableView
LZTableView.delegate = self;
LZTableView.dataSource = self;
self.view.backgroundColor = UIColor.white
self.setExtraCellLineHidden();
// 下拉刷新和加载更多组件
LZTableView.mj_header = MJRefreshNormalHeader.init(refreshingTarget: self, refreshingAction: #selector(refreshData))
LZTableView.mj_footer = MJRefreshBackNormalFooter.init(refreshingTarget: self, refreshingAction: #selector(loadMoreData))
//注:
//用xib或者storyboard时,给你的 表格 注册一个 tableViewCell 的xib或者class, 或者在storyboard里给你的 tableview 关联一个cell
//纯代码写 tableView的时候 cell复用必须要先注册(声明)重用标示符 标示cell
LZTableView.register(UITableViewCell.self, forCellReuseIdentifier: "CellReuseIdentifier")
}
// 获取数据,子类重写即可
func getCurrentData() {
}
func refreshData() {
currentPage = 1;
self.getCurrentData()
}
func loadMoreData() {
self.getCurrentData()
}
func setHeaderFooterViewStop(){
if LZTableView.mj_header.isRefreshing() {
LZTableView.mj_header.endRefreshing()
}
if LZTableView.mj_footer.isRefreshing() {
LZTableView.mj_footer.endRefreshing()
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
//row
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 20;
}
//section
func numberOfSections(in tableView: UITableView) -> Int {
return 1;
}
//heightForRow
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 44.0;
}
//HeightForHeaderInSection
func tableView(_ tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {
return 0;
}
//heightForFooterInSection
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0
;
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CellReuseIdentifier", for: indexPath)
cell.textLabel?.text = "122"
return cell;
}
//点击事件。点击cell的时候触发
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
}
//去掉多余的cell底线
func setExtraCellLineHidden(){
let view = UIView()
view.backgroundColor = UIColor.clear
LZTableView.tableFooterView = view
}