Swift中的坑
发布时间:2020-12-14 06:01:12 所属栏目:百科 来源:网络整理
导读:1.main文件去哪儿了? OC中main.m中的代码,通过@UIApplicationMain标记自动生成 可以注掉AppDelegate里的@UIApplicationMain,自己实现Main,不过一般没人这样做 实现下面代码就是OC中的main文件的函数 UIApplicationMain(Process.argc,Process.unsafeArgv,n
1.main文件去哪儿了?
UIApplicationMain(Process.argc,Process.unsafeArgv,nil,NSStringFromClass(AppDelegate)) 2.如何通过字符串创建类对象?
//获取命名空间,在info.plist文件里就是Executable file let nameSpace = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String //拼接成固定格式 let controller:AnyClass = NSClassFromString(nameSpace + "." + controllerName)! //创建对象 let viewController = (controller as! UIViewController.Type).init() 3.Swift中的Any,AnyObject,AnyClass分别代表是什么?
4.在Swife中如何抓取异常?
do{ let path = /..路径../ let data =/..转data../ //编译器会要求你实行异常检测,于是在序列化前面添加try字段 //外部包裹do,catch,显而易见出错自然会走catch let dicArr = try NSJSONSerialization.JSONObjectWithData(data,options: NSJSONReadingOptions.MutableContainers) }catch { // 如果抛出异常就会来到catch } 5.在swift中如何定义全局打印方法
func HJSLog<T>(message: T) { #if DEBUG print("(message)") #endif } 6.在swift中,单例怎么写?
static var onceToken: dispatch_once_t = 0 static var instance: NetworkTools? class func shareNetworkTools() -> NetworkTools { dispatch_once(&onceToken) { () -> Void in print("我被调用了") instance = NetworkTools() } return instance! }
static let instance: NetworkTools = NetworkTools() class func shareNetworkTools() -> NetworkTools { return instance } 7.在swift中如何私有化点击事件方法
//按钮点击handle @objc private func composeClick(){ }` 8.在swift中如何懒加载
///懒加载一个imageView private lazy var icon:UIImageView = { let imageV = UIImageView(image: UIImage(named: "visitordiscover_feed_image_smallicon")) return imageV }() 9.在swift中的协议(protocol)
@objc protocol VisitorViewDelegate:NSObjectProtocol { //点击注册按钮 optional func visitorViewDidRegisterBtnClick(visitView: VisitorView) //点击登录按钮 optional func visitorViewDidLoginBtnClick(visitView:VisitorView) }
weak var delegate:VisitorViewDelegate?
///注册handle @objc private func registerClick(){ delegate?.visitorViewDidRegisterBtnClick!(self) } ///登录handle @objc private func loginClick(){ delegate?.visitorViewDidLoginBtnClick?(self) } 10.在swift中如何写分类
import UIKit extension UIBarButtonItem { convenience init(target:AnyObject?,action:Selector,image:String) { let btn = UIButton(type: UIButtonType.Custom) btn.setImage(UIImage(named: image),forState: UIControlState.Normal) btn.setImage(UIImage(named: image + "_highlighted"),forState: UIControlState.Highlighted) btn.addTarget(target,action: action,forControlEvents: UIControlEvents.TouchUpInside) self.init(customView:btn) } } 11.为何经常被强制实现init(coder: NSCoder)
class MyClass { func methodMustBeImplementedInSubclass() { fatalError("这个方法必须在子类中被重写") } } class YourClass: MyClass { override func methodMustBeImplementedInSubclass() { print("YourClass 实现了该方法") } } class TheirClass: MyClass { func someOtherMethod() { } } YourClass().methodMustBeImplementedInSubclass() // YourClass 实现了该方法 TheirClass().methodMustBeImplementedInSubclass() // 这个方法必须在子类中被重写
required init(coder: NSCoder) { fatalError("NSCoding not supported") } 12.在swift中使用guard与fatalError配合抛出异常
guard let safeValue = criticalValue else { fatalError("criticalValue cannot be nil here") } someNecessaryOperation(safeValue)
if let safeValue = criticalValue { someNecessaryOperation(safeValue) } else { fatalError("criticalValue cannot be nil here") }
if criticalValue == nil { fatalError("criticalValue cannot be nil here") } someNecessaryOperation(criticalValue!)
13.在swift中,互斥锁变成什么样了?
@synchronized(self) { //需要执行的代码块 }
objc_sync_enter(self) //需要执行的代码块 objc_sync_exit(self)
14.在swift中,引用self时,如何避免循环引用
__weak typeof(self) weakSelf = self;
//这里用gcd举例不好,毕竟系统的块不会造成循环引用,这里就勉强的学一下怎么改吧 dispatch_async(dispatch_get_global_queue(0,0)) {[unowned self] () -> Void in self.view //添加自己的代码 }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |