美文网首页
Swift中好用的Extension(一)

Swift中好用的Extension(一)

作者: iOS小乔 | 来源:发表于2017-08-10 21:07 被阅读951次

    一、对 NSNotification.Name使用Extension

    在swif3.0中使用通知,创建名称时需要是NSNotification.Name类型,如下发送通知和接收通知

      //发送通知
    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "test"), object: nil)
    //接收通知
     NotificationCenter.default.addObserver(self, selector: #selector(test), name: NSNotification.Name(rawValue: "test"), object: nil)
    

    这样写很麻烦,下面我们通过使用Extension让书写时更简单一些,代码如下:

    extension Notification.Name {
    
    public struct UserInfo {
        //用户登录成功处理
        public static let userLogin = Notification.Name(rawValue: "notification.name.userLogin")
        //用户退出登录处理
        public static let userLogout = Notification.Name(rawValue: "notification.name.userLogout")
        //用户被强制退出登录处理
        public static let userForceLogout = Notification.Name(rawValue: "notification.name.userForceLogout")
       }
    }
    

    通过在Notification.Name中添加一个struct,这样在调用的时候直接使用点语法,如下:

    NotificationCenter.default.post(name: Notification.Name.UserInfo.userLogin, object: nil)
     //接收
    NotificationCenter.default.addObserver(self, selector: #selector(test), name: Notification.Name.UserInfo.userLogin, object: nil)
    

    二、对UIStoryboard进行Extension

    平常使用storyboard获取一个viewcontroller

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let vc = storyboard.instantiateViewController(withIdentifier: "TestViewController")
    

    通过同样的思想,在UIStoryboard中添加一个struct,更加方便的调用

    extension UIStoryboard{
        public struct Sbname{
            //main
            public static let main = UIStoryboard(name: "Main", bundle: nil)
        
        }
    }
    

    在调用的时候就可以这样写了

    let vc = UIStoryboard.Sbname.main.instantiateViewController(withIdentifier: "TestViewController")
    

    三、更多Extension...

     extension String {
        var floatValue: Float {
        return (self as NSString).floatValue
    }
    
    func subString(start:Int,length:Int = -1) -> String {
        
        var len = length
        if len == -1 {
            len = self.count - start
        }
        let st = self.index(startIndex, offsetBy: start)
        let en = self.index(st, offsetBy: len)
        return String(self[st ..< en])
    }
    }
    

    以同样的思想,可以对UIColor,UIFont等常用类型进行扩展,在此就不一一列举了。在此抛砖引玉,大家可以在评论处写写你是如何扩展的。

    注意:转载请注明iOS小乔 http://www.jianshu.com/p/ab2f0b7d764a

    相关文章

      网友评论

          本文标题:Swift中好用的Extension(一)

          本文链接:https://www.haomeiwen.com/subject/eykkrxtx.html