目前正在用swift 3.0写一个自己的视频类项目,快写完了,忽然想整理一下一些细节,个人感觉swift 还是不够完善,很多oc种的功能比如kvo,想要去用需要用@dynamic 去标记变量 ,同时自己学的不够好,还需要进一步去将更多swift 的语法用到自己的代码中,这样才能记得清楚,自己研究还不够深入,可能有些错误的地方,请指正:
开始
项目中,
-当跨controller返回时,需要删除栈中的控制器
-动态操作UITableViewCell 时,需要对模型数组操作:
for (index,verify) in self.pendingArray.enumerated() {
if verify == pending {
self.pendingArray.remove(at: index)
//找到了直接暂停遍历
break
}
}
移动浮动图标,悬浮的图标有时候影响操作,需要挪开,但是又能隐藏
private func panSomeWhere(_ gp: UIPanGestureRecognizer) {
//拖动的位置跨度
let point = gp.translation(in: self.view)
//将拖动的试图的中心按拖动的距离挪动
var destinationX = (gp.view?.center.x)! + point.x
var destinationY = (gp.view?.center.y)! + point.y
let viewH = (gp.view?.frame.size.height)! / 2
let viewW = (gp.view?.frame.size.width)! / 2
if destinationY - viewH < 0 { destinationY = viewH } //上边界
if destinationX - viewW < 0 { destinationX = viewW } //左边界
if destinationY + viewH > SCREEN_H {destinationY = SCREEN_H - viewH}//下边界
if destinationX + viewW > SCREEN_W {destinationX = SCREEN_W - viewW}//右边界
gp.view?.center = CGPoint.init(x: destinationX, y: destinationY)
//将gp置0,防止拖动的view滑出出窗外
gp.setTranslation(CGPoint.zero, in: view)
}
swift 中button 的setSelect没有了,可以用属性监测的willSet,didSet 去做
class MyButton : UIButton {
override var isSelected: Bool {
willSet {
print("changing from \(isSelected) to \(newValue)")
}
didSet {
print("changed from \(oldValue) to \(isSelected)")
}
}
}
let button = MyButton()
button.state == .normal
button.isSelected = true // Both events fire on change.
button.state == .selected
button.isSelected = true // Both events still fire.
异常处理代码:
func uncaughtException() {
NSSetUncaughtExceptionHandler { (exception) in
//异常处理信息
let array = exception.callStackSymbols
let reson = exception.reason
let name = exception.name
let errorContent = "=======异常错误报告========\nname:\(name)\nreson:\(reson)\ncallStatackSymobols:\(array.joined(separator: "\n"))"
try?errorContent.write(toFile: NSHomeDirectory()+"/Documents/error.log", atomically: true, encoding: String.Encoding.utf8)
}
}
func readLog() {
let dataPath = NSHomeDirectory()+"/Documents/error.log"
let readHandle = try?FileHandle.init(forReadingFrom: URL.init(string: dataPath)!)
let data = readHandle?.readDataToEndOfFile()
if let fileData = data {
let readString = String.init(data: fileData, encoding:String.Encoding.utf8)
print("content====>\(readString!)")
}
}
字符串转data型
let data = str.data!(using: String.Encoding.utf8.rawValue)!
data转string型
let str = NSString(data:data! ,encoding: String.Encoding.utf8.rawValue)
NSCaseInsensitiveSearch = 1,//不区分大小写比较
NSLiteralSearch = 2,//区分大小写比较
NSBackwardsSearch = 4,//从字符串末尾开始搜索
NSAnchoredSearch = 8,//搜索限制范围的字符串
NSNumbericSearch = 64//按照字符串里的数字为依据,算出顺序。