本人会在此不定时更新, 现在废话不哆嗦, 直接来个简单的基础回顾吧 !!
@H_502_3@NSRange :用于表示范围的结构体,@H_502_3@有两个属性:起始点@H_502_3@location和长度@H_502_3@length,@H_502_3@ swift新增了@H_502_3@Range,和@H_502_3@NSRange相识;但不可通用
let nsstring : NSString = "my name is cjh" let nsrange : NSRange = nsstring.range(of: "cjh") print("\(nsrange.length),\(nsrange.location)") // 打印 3,11
@H_502_3@数组 @H_502_3@:集合类型,用来按顺序存储相同类型的数据
// 数组的声明形式很广泛 var list : [Int] = [23,24] var emptyArray = [Int]() var intList = Array<Int>() var stringArr = ["kobe","james"] print("\(stringArr[0]),\(stringArr[1])") // 输出kobe james; 数组的数据是有顺序的, 通过位置下标访问修改元素
let view = UIView() view.backgroundColor = UIColor.red view.frame = CGRect(x:10,y:19,width:19,height:19) view.alpha = 0.5 // 半透明 view.alpha = 1.0 // 不透明 view.alpha = 0.0 // 透明 self.view.addSubview(view)
@H_502_3@
@H_502_3@as:@H_502_3@1.用于类型转换和判断,@H_502_3@ 2.as?用于可为空转换
let astext : AnyObject? = "my name is cjh" let asstring = astext as! String // 强制转换, 如果无法转换,程序出错 let length = (asstring as NSString).length // 把String类型转成NSString
bundle用于获取和使用文件的类@H_502_3@ Bundle内含有:@H_502_3@info.plist,可执行文件,图像,图标,音频等资源文件
let mainBundle = Bundle.main let fileParh = mainBundle.path(forResource: "cjh",ofType: "jpg") // 获取cjh图片的路径 let info = mainBundle.infoDictionary // 获得配置项字典实例 let bundleId = mainBundle.object(forInfoDictionaryKey: "CFBundleName") // 获得应用程序的Bundle名
@H_502_3@bounds 视图在自身坐标系中的位置和大小,@H_502_3@该视图@H_502_3@bounds的坐标默认是(@H_502_3@0,@H_502_3@0)通过修改@H_502_3@view的@H_502_3@bounds属性可以修改本地坐标系统的原点位置,影响的是它子@H_502_3@view的位置和大小
let view1 = UIView(frame: CGRect(x: 20,y : 20,width: 300,height: 300)) view1.backgroundColor = UIColor.yellow view1.bounds = CGRect(x: -100,y: -20,width: 280,height: 250) let view2 = UIView(frame: CGRect(x: 0,y : 0,width: 100,height: 100)) view2.backgroundColor = UIColor.blue view1.addSubview(view2) self.view.addSubview(view1)
@H_502_3@break 在循环语句中,终止并跳出循环
let numbers = [1,2,3] for number in numbers { if number == 2 { break // 当循环到2就终止循环 } else { print(number) } } switch numbers[1] { case 1: break; // 当numbers的第0个是1的时候 终止switch default: print("不是1的情况") }
@H_502_3@CoreAnimation一个合成引擎,@H_502_3@工作是尽可能快的将不同的可视化的内容合成到屏幕上。这个可视化内容是不同的层@H_502_3@layer,构成一个叫做层树(@H_502_3@layer tree)的层次结构
let view = JHView(frame: CGRect(x: 40,y: 40,width: 40,height: 40)) // UIView的属性layer是CALayer类,常见作用是加阴影、圆角、动画等 view.backgroundColor = UIColor.orange view.layer.shadowRadius = 4 view.layer.shadowOpacity = 0.8 view.layer.shadowColor = UIColor.lightGray.cgColor view.layer.shadowOffset = CGSize(width: 15,height: 15) self.view.addSubview(view)
@H_502_3@CoreGraphics为系统提供的矢量绘制框架@H_502_3@,@H_502_3@UIKit包含了这个框架@H_502_3@.一般@H_502_3@CG开头的类或结构体@H_502_3@(CGPoint)属于@H_502_3@CoreGraphics框架
var rect = CGRect(x: 20,y: 20,width: 20,height: 20) rect.origin = CGPoint(x: 20,y: 20) rect.size = CGSize(width: 20,height: 20)
@H_502_3@CGAffineTransform字面意思仿射转换,@H_502_3@包含控件的缩放,旋转、平移等转换信息的结构体
let transformView = JHView(frame: CGRect(x: 140,y: 140,height: 100)) UIView.animate(withDuration: 2.0) { transformView.backgroundColor = UIColor.blue transformView.transform = CGAffineTransform(scaleX: 1,y: 1) transformView.transform = CGAffineTransform(rotationAngle: CGFloat(180 * M_PI / 180)) transformView.transform = CGAffineTransform(translationX: 100,y: 200) self.view.addSubview(transformView) }
@H_502_3@switch之@H_502_3@case语句的组成部分,表示一种情况
let age = arc4random() % 101 // age为0~100之间的随机数 switch age { case 0..<18: print("未成年") case 18..<100: print("成年人") default: break }
@H_502_3@class 用来定义和声明一个类;定义类属性或类方法:不依赖于具体对象的属性和方法
class ColorOfNature { // 1.定义类 class func skyBlue() -> UIColor { // 2.定义类方法 return UIColor.blue } } let skyColor = ColorOfNature.skyBlue() // 3.使用类名 + 点语法调用类方法,不需要创建对象
@H_502_3@continue 用在循环结构中,结束本次循环,忽略@H_502_3@continue后的代码,开始下一次循环
let numbers = [1,3,4] for number in numbers { if number == 2 || number == 3 { continue } print("== \(number)") // 输出1,4, 不会输出2,3 }
@H_502_3@Data 二进制数据流类型,创建后不可修改@H_502_3@(NSMutableData可修改@H_502_3@),在文件操作、网络使用较广泛
let string = "梅西c罗科比詹姆斯" let data : Data = string.data(using: String.Encoding.utf8)! let newString = String.init(data: data,encoding: String.Encoding.utf8)! print(newString) print(string)
@H_502_3@Date 提供和处理日期和时间的类
let today = Date() let yesterday = Date(timeIntervalSinceNow: -86400) print(today) print(yesterday) // Date的默认是UTC全球时间 let formatter = DateFormatter() // 想要输入本地时间,要用到Dateformatter formatter.dateFormat = "yyy/MM/dd" let currentDate = formatter.string(from: today) print(currentDate)
@H_502_3@
@H_502_3@fallthrough作用@H_502_3@:在@H_502_3@switch-case语句中,@H_502_3@当一个@H_502_3@case执行结束后,@H_502_3@继续执行下一个@H_502_3@case
var ageNumber = 6 switch ageNumber { case 0...7: print("儿童") fallthrough case 7...18: print("小孩") default: break }
@H_502_3@guard 判断语句关键词,判断一段代码是否该被执行
let x : AnyObject = -4 as AnyObject test(x: x) func test(x : AnyObject) -> Void { guard let y = x as? Int else { return } print(y) guard let z = x as? Int,z < 0 else { return } print(z) }
@H_502_3@for-in 循环关键词
let names = ["ios","swift","xcode"] for (index,name) in names.enumerated() { print(String(index) + " " + name) }
@H_502_3@init 构造方法关键词,@H_502_3@ 用于对象初始化的方法,初始化是类,结构体和枚举类型实例化的准备阶段
class Car { var speed :Double init() { speed = 70.0 } } let car = Car() print(car.speed) // 输出70.0 // 当对象初始化时,构造方法自动调用,该方法可以带参数也可以不带
@H_502_3@lazy 懒加载关键词,被标识的存储属性只有在被用到时加载,不在对象初始化时加载
class BigData { var title = "small title" lazy var content = "small content" }
let data = BigData() // 注意 data的content属性还没有加载 let content = data.content // 在被调用时才加载, 懒加载的作用是提高内存的使用效率
@H_502_3@let 声明常量的关键词,常量一旦被赋值,不可修改,@H_502_3@ 与声明变量@H_502_3@var对应
let homeLand = "ios" // 用let给不需要改变的属性赋值 let score = 88 score += 1 // 上面的运算会出现系统报错