2018-06-20 14:49:13 qq_37269542 阅读数 669
  • 60分钟带你掌握NLP BERT理论与实战

    本课程会介绍最近NLP领域取得突破性进展的BERT模型。首先会介绍一些背景知识,包括Word Embedding、RNN/LSTM/GRU、Seq2Seq模型和Attention机制等。然后介绍BERT的基础Transformer模型,这个模型最初用于机器翻译,但是它提出的Self-Attention被用于替换传统的RNN/LSTM/GRU模型。再然后是介绍BERT出现之前的Universal Sentence Embedding模型,包括ELMo和OpenAI GPT。接着介绍BERT模型是什么,它解决了之前模型的哪些问题从而可以达到这么好的效果。代码分析和案例介绍,通过解决实际问题加深理解

    3950 人正在学习 去看看 CSDN讲师

最近因为项目需求需要对项目代码进行升级,从之前的swift2.0版本升级到swift4.1版本。现将升级过程中遇到的一些语法变化与大家分享一下,希望会对大家有所帮助,

Swift 2.0 --> Swift 4.0

1.self.edgesForExtendedLayout = UIRectEdge.None  -->  self.edgesForExtendedLayout = UIRectEdge.init(rawValue: 0)

2.UINavigationBar.appearance().titleTextAttributes=NSDictionary(object:UIColor.whiteColor(), forKey:NSForegroundColorAttributeName) as? [String : AnyObject]  -->  UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.white]
[NSForegroundColorAttributeName: UIColor.white]  -->  [NSAttributedStringKey.foregroundColor : UIColor.white]

3.使用Alamofire获取statusCode: res.result.error?.code  -->  res.response?.statusCode

4.CGRectZero  -->  CGRect.zero

5.从其他线程回到主线程的方法:
   dispatch_async(dispatch_get_main_queue(), { () -> Void in 

   })		--> 

   DispatchQueue.main.async {

   }

 6.	UILabel获取字体大小的属性boundingRectWithSize的改变:
 	let size = body.boundingRectWithSize(CGSizeMake(CGFloat(w-20), CGFloat(10000.0)),options:NSStringDrawingOptions.UsesLineFragmentOrigin,  attributes: [NSFontAttributeName:UIFont.systemFontOfSize(12)],context:nil)     -->
 	let size = body.boundingRect(with: CGSize.init(width: CGFloat(Constants.SCREEN_W - 20), height: CGFloat(10000.0)),options:NSStringDrawingOptions.usesLineFragmentOrigin,  attributes:[NSAttributedStringKey.font : UIFont.systemFont(ofSize: 12)],context:nil)

 7.let myMutableString = NSMutableAttributedString(string: (!body.isEmpty ? body : "") , attributes: [NSFontAttributeName:UIFont(name: "HelveticaNeue", size: 12.0)!])	 -->  
   let myMutableString = NSMutableAttributedString.init(string: (!body.isEmpty ? body : ""), attributes: [NSAttributedStringKey.font : UIFont(name: "HelveticaNeue", size: 12.0)!])
 
 8.let paragraphStyle = NSMutableParagraphStyle()
 	myMutableString.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle,range: NSRange(location:0,length:myMutableString.length))   -->
 	myMutableString.addAttribute(NSAttributedStringKey.paragraphStyle, value: paragraphStyle, range: NSRange.init(location: 0, length: myMutableString.length))

 9.SDWebImage的用法改变:
   headImg.sd_setImageWithURL(NSURL(string: self.images[indexPath.row] as! String), placeholderImage: UIImage(named: "default_logo"))     -->   
   headImg.sd_setImage(with: NSURL.init(string: self.images[indexPath.row] as! String)! as URL, placeholderImage: UIImage(named: "default_logo"), options: .retryFailed, completed: nil)

10. UIApplication.sharedApplication().keyWindow?.windowLevel = UIWindowLevelStatusBar    -->   UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar

11. NSCalendarUnit.Day  -->   NSCalendar.Unit.day

12. var components = cal.components([NSCalendar.Unit.day, NSCalendar.Unit.month, NSCalendar.Unit.year, NSCalendar.Unit.weekOfYear, NSCalendar.Unit.hour, NSCalendar.Unit.minute, NSCalendar.Unit.second, NSCalendar.Unit.nanosecond], from: NSDate() as Date)
	components.setValue(components.month-3, forComponent: NSCalendar.Unit.month)  -->  components.setValue(components.month! - 3, for: .month)

13. formatter.stringFromDate(cal.dateFromComponents(components)!)  -->  formatter.string(from: cal.date(from: components)!)

14. string.characters.count  -->  string.count

15. string.stringByReplacingOccurrencesOfString(" ", withString: "")	-->	   string.replacingOccurrences(of: " ", with: "")

16. for i in str.characters {
	
	}         -->     
	for i in str {

	}

17. str.removeRange(index!)  -->   str.removeSubrange(index!)

18. let alertInputTelController = UIAlertController(title: title, message: "", preferredStyle: UIAlertControllerStyle.alert)
	alertInputTelController.addTextFieldWithConfigurationHandler {

	}	  -->   
	alertInputTelController.addTextField {

	}

19. addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange.init(location: startIndex!, length: 1))   -->  
	attrString.addAttribute(.foregroundColor, value: UIColor.red, range: NSRange.init(location: startIndex!, length: 1))

20. tf.text?.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) != ""   --> 
	tf.text?.trimmingCharacters(in: NSCharacterSet.whitespaces) != ""     //检测textField中输入的字符去掉空格后是否为空的方法

21. kNewStoreInfo.setObject(tf.text!, forKey: key)   --> 
	kNewStoreInfo.setObject(tf.text!, forKey: key as NSCopying)

22. textView.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())    -->   
	textView.text.trimmingCharacters(in: NSCharacterSet.whitespacesAndNewlines)

23. //将内容同步写到文件中去(Caches文件夹下)
        let cachePath = NSFileManager.defaultManager().URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: .UserDomainMask)[0]
        let path = cachePath.URLByAppendingPathComponent("log.txt")
        appendText(path, string: "\(datestr) \(consoleStr)")     

        --> 

        let cachePath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
        let path = cachePath.appendingPathComponent("log.txt")
        appendText(fileURL: path as NSURL, string: "\(datestr) \(consoleStr)")

24. FileManager.defaultManager().createFileAtPath(fileURL.path!, contents: nil, attributes: nil)  -->  
	FileManager.default.createFile(atPath: fileURL.path!, contents: nil, attributes: nil)

25. NSFileHandle.init(forWritingAtPath: fileURL.path!)   -->
	FileHandle.init(forWritingAtPath: fileURL.path!)

26. //找到末尾位置并添加
    fileHandle!.seekToEndOfFile()        
    fileHandle?.writeData(stringToWrite.dataUsingEncoding(NSUTF8StringEncoding)!)  -->
    fileHandle?.write(stringToWrite.data(using: String.Encoding.utf8)!)

27. string.componentsSeparatedByString(",")  -->   string.components(separatedBy: ",")

28. NSIndexPath(forRow: i, inSection: 0)  -->   NSIndexPath(row: i, section: 0)

29. NSComparisonResult.OrderedAscending  -->  ComparisonResult.orderedAscending

30. NSNotificationCenter.defaultCenter().postNotificationName("Notification_UploadImage", object: j)  -->
	NotificationCenter.default.post(name: NSNotification.Name(rawValue: "Notification_UploadImage"), object: j)

31. NSNotificationCenter.defaultCenter().postNotificationName("Notification_UploadImage", object: "error", userInfo: nil)  -->
	NotificationCenter.default.post(name: NSNotification.Name(rawValue: "Notification_UploadImage"), object: "error", userInfo: nil)

32. let startIndex =  Int("\(range.startIndex)") -->
	let startIndex =  Int("\(range.upperBound.encodedOffset)") - 1

33. // 单例模式
    class var sharedInstance: TreeNodeHelper {
        struct Static {
            static var instance: TreeNodeHelper?
            static var token: dispatch_once_t = 0
        }
        dispatch_once(&Static.token) { // 该函数意味着代码仅会被运行一次,而且此运行是线程同步
            Static.instance = TreeNodeHelper()
        }
        return Static.instance!
    }
    -->  

    //由于dispatch_once在Swift4.0也已经被废弃   通过给DispatchQueue添加扩展实现
    extension DispatchQueue { 
    private static var _onceTracker = [String]()
    public class func once(token: String, block: () -> ()) {
        objc_sync_enter(self)
        defer {
            objc_sync_exit(self)
        }
        if _onceTracker.contains(token) {
            return
        }
        _onceTracker.append(token)
        block()
    }
    
    func async(block: @escaping ()->()) {
        self.async(execute: block)
    }
    
    func after(time: DispatchTime, block: @escaping ()->()) {
        self.asyncAfter(deadline: time, execute: block)
    }
}
// 单例模式
    class var sharedInstance: TreeNodeHelper {
        
        struct Static {
            static var instance: TreeNodeHelper?
            static let _onceToken = NSUUID().uuidString
        }
        //由于dispatch_once在Swift4.0也已经被废弃  此处通过给DispatchQueue添加扩展实现
        DispatchQueue.once(token: Static._onceToken) { // 该函数意味着代码仅会被运行一次,而且此运行是线程同步
           Static.instance = TreeNodeHelper()
        }
        return Static.instance!
    }

34. let url = NSURL(string:urlString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)  -->
	let url = NSURL(string: urlString.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!)

35. dispatch_async(DispatchQueue.global(0, 0), {
                    
    })    -->   
    DispatchQueue.global().async {

    }
 
36. 在Google Maps SDK中有三个常量来表示每种类型,此属性必须设置成其中一个. 这些常量是:
	kGMSTypeNormal
	kGMSTypeTerrain
	kGMSTypeHybrid
	在使用时候的变化:
 	kGMSTypeNormal  -->  GMSMapViewType.normal

 	kGMSMarkerAnimationPop --> GMSMarkerAnimation.pop

37. let directionsData = NSData(contentsOfURL: directionsURL! as URL)  -->
	let directionsData = NSData(contentsOf: directionsURL as URL)

38. 使用Alamofire解析获取返回的error code值方法:
	res.result.error?.code   -->   res.result.error?._code


2018-10-19 17:15:36 Lea__DongYang 阅读数 1871
  • 60分钟带你掌握NLP BERT理论与实战

    本课程会介绍最近NLP领域取得突破性进展的BERT模型。首先会介绍一些背景知识,包括Word Embedding、RNN/LSTM/GRU、Seq2Seq模型和Attention机制等。然后介绍BERT的基础Transformer模型,这个模型最初用于机器翻译,但是它提出的Self-Attention被用于替换传统的RNN/LSTM/GRU模型。再然后是介绍BERT出现之前的Universal Sentence Embedding模型,包括ELMo和OpenAI GPT。接着介绍BERT模型是什么,它解决了之前模型的哪些问题从而可以达到这么好的效果。代码分析和案例介绍,通过解决实际问题加深理解

    3950 人正在学习 去看看 CSDN讲师

今天完善夫特架子,导航里面用夫特获取类名的时候,突然很懵逼,居然木有。类(OC),只好自己研究下了,写了一个获取类名的扩展名,后来发现有个.self的方法,也尝试了下哈,看下图

print(UIScreenEdgePanGestureRecognizer().ClassName)
print(UIScreenEdgePanGestureRecognizer.self)
print(type(of: UIScreenEdgePanGestureRecognizer.self))

打印结果看下图

看到这里相信也不用我来解释了哈,我就说个结果吧:

:(获取类名)用.self

类对象:(获取类对象)用ClassName

最后贴上类名的代码

extension NSObject
{
    // MARK:返回className
    var ClassName:String{
        get{
            let name =  type(of: self).description()
            if(name.contains(".")){
                return name.components(separatedBy: ".")[1];
            }else{
                return name;
            }
            
        }
    }
    
}

手敲不容易,麻烦点个赞,谢谢〜

2019-09-18 16:51:38 songzhuo1991 阅读数 39
  • 60分钟带你掌握NLP BERT理论与实战

    本课程会介绍最近NLP领域取得突破性进展的BERT模型。首先会介绍一些背景知识,包括Word Embedding、RNN/LSTM/GRU、Seq2Seq模型和Attention机制等。然后介绍BERT的基础Transformer模型,这个模型最初用于机器翻译,但是它提出的Self-Attention被用于替换传统的RNN/LSTM/GRU模型。再然后是介绍BERT出现之前的Universal Sentence Embedding模型,包括ELMo和OpenAI GPT。接着介绍BERT模型是什么,它解决了之前模型的哪些问题从而可以达到这么好的效果。代码分析和案例介绍,通过解决实际问题加深理解

    3950 人正在学习 去看看 CSDN讲师

关键字Any、AnyObject

  • Swift提供了两种特殊的类型:Any、AnyObject

Any:可以代表任意类型(枚举、结构体、类,也可以包括函数类型)
范围更广,代表除函数外任何类型的实例。不仅包含object对象,还包含基本类型。
AnyObject:可以代表任意类类型(在协议后面写上:AnyObject代表只有类能遵守这个协议)
代表任何class类型的对象实例


关键字is、as?、as!、as

  • Swift提供了两种特殊的类型:Any、AnyObject
  • is用来判断是否为某种类型,as用来做强制类型转换
        protocol Runnable { func run() }
        class Person {}
        class Student : Person, Runnable {
            func run() {
                print("student run")
            }
            func study() {
                print("student study")
            }
        }
    var stu: Any = 10
    print(stu is Int) //true
    stu = "Jack"
    print(stu is String) //true
    stu = Student()
    print(stu is Person) //true
    print(stu is Student) //true
    print(stu is Runnable) //true
    var stu: Any = 10
    (stu as? Student)?.study() //没有调用study
    stu = Student()
    (stu as? Student)?.study() //student study
    (stu as! Student).study()  //student study
    (stu as? Runnable)?.run()  //student run
    var data = [Any]()
    data.append(Int("123") as Any)
    var d = 10 as Double
    print(b)  //10.0在这里插入代码片

关键字X.self、X.Type、AnyClass

  • X.self是一个元类型(metadata)的指针,metadata存放着类型相关信息
  • X.self属于X.Type类型
class Person {}
class Student : Person {}
var perType: Person.Type = Person.self
var stuType: Student.Type = Student.self
perType = Student.self
var anyType: AnyObject.Type = Person.self
anyType = Student.self

public typealias AnyClass = AnyObject.Type
var anyType2: AnyClass = Person.self
anyType2 = Student.self
var per = Person()
var perType = type(of:per)  //Person.self
print(Person.self == type(of:per))  //true

应用:父类必须用required修饰初始化器,保证子类也有对应的初始化器

class Animal { required init() {} }  
class Cat : Animal {}
class Dog : Animal {}
class Pig : Animal {}
func create(_ clses: [Animal.Type]) -> [Animal] {
    var arr = [Animal]()
    for cls in clses {
        arr.append(cls.init())
    }
    return arr
}
print(create([Cat.self, Dog.self, Pig.self]))

runtime:swift还有一个隐藏的基类:Swift_SwiftObject

class Person {}
class Student : Person {}
class_getInstanceSize(Person.self)
class_getSuperclass(Person.self)  //
class_getSuperclass(Student.self)

关键字Self

  • Self一般用作返回值类型,限定返回值跟方法调用者必须是同一类型(也可以作为参数类型)
protocol Runnable {
    func test() -> Self
}
class Person : Runnable {
    required init() {}
    func test() -> Self { type(of:self).init() }
}
class Student: Person { }

var p = Person()
print(p.test()) //Person
var stu = Student()
print(stu.test()) //Student

如果Self用在类中,要求返回时调用的初始化器是required

2017-01-17 22:23:10 brycegao321 阅读数 4297
  • 60分钟带你掌握NLP BERT理论与实战

    本课程会介绍最近NLP领域取得突破性进展的BERT模型。首先会介绍一些背景知识,包括Word Embedding、RNN/LSTM/GRU、Seq2Seq模型和Attention机制等。然后介绍BERT的基础Transformer模型,这个模型最初用于机器翻译,但是它提出的Self-Attention被用于替换传统的RNN/LSTM/GRU模型。再然后是介绍BERT出现之前的Universal Sentence Embedding模型,包括ELMo和OpenAI GPT。接着介绍BERT模型是什么,它解决了之前模型的哪些问题从而可以达到这么好的效果。代码分析和案例介绍,通过解决实际问题加深理解

    3950 人正在学习 去看看 CSDN讲师

相信大家都知道self关键字的作用, 但你知道Swift还有个Self关键字吗?
Self关键字只能用在类里, 作为函数返回值类型, 表示当前类。


类定义.png


这段代码里有self和Self, self指向类自身;Self只能作为函数关键字, setValue函数的返回值是ClassA类型。
我们看到有个warning, 就是setValue函数的返回值没有被使用; 这时可以用注解@discardableResult解决。


注解.png

PS: Self关键字常常和@discardableResult配对使用。

var objA: ClassA? = ClassA(a: 1, b: 2)
var objB = objA?.setValueA(param: 3)
print("objA a: (objB!.a)")
objB = nil
objA = nil
Swift的类是引用传递, 上面的objA和objB指向同一个对象, 即引用计数为2, 将2者都设置为nil后立即执行析构函数deinit。
日志:
objA a: 3
ClassA deinit

参考上面类的写法,编写一个结构体,但结构体不支持Self关键字! 

struct StructA {
var a: Int
var b: Int
init(a: Int, b: Int) {
self.a = a
self.b = b
}
@discardableResult
mutating func setValueA(param: Int) -> StructA {
self.a = param
return self
}
}
var structA = StructA(a: 1, b: 2)
var structB = structA.setValueA(param: 3)
print("structA a: (structA.a), structB a: (structB.a)")
structB.a = 4
print("after set 4, structA a: (structA.a), structB a: (structB.a)")
结构体是值传递, setValueA会新生成一个相同的实例。
日志:
structA a: 3, structB a: 3
after set 4, structA a: 3, structB a: 4

声明一个枚举说明值传递。

 enum EnumA: Int {
case Monday
case Tuesday
}
extension EnumA {
func getEnum(a: Int) -> EnumA {
switch a {
case 1:
return .Monday
case 2:
return .Tuesday
default:
return self
}
}
}
var enumA: EnumA = .Tuesday
var enumB = enumA.getEnum(a: 0)
print("enumA: (enumA.rawValue), enumB:(enumB.rawValue)")
enumB = .Monday
print("after set monday, enumA: (enumA.rawValue), enumB:(enumB.rawValue)")

输出:
enumA: 1, enumB:1
after set monday, enumA: 1, enumB:0

2016-12-19 06:27:57 sinat_20037505 阅读数 294
  • 60分钟带你掌握NLP BERT理论与实战

    本课程会介绍最近NLP领域取得突破性进展的BERT模型。首先会介绍一些背景知识,包括Word Embedding、RNN/LSTM/GRU、Seq2Seq模型和Attention机制等。然后介绍BERT的基础Transformer模型,这个模型最初用于机器翻译,但是它提出的Self-Attention被用于替换传统的RNN/LSTM/GRU模型。再然后是介绍BERT出现之前的Universal Sentence Embedding模型,包括ELMo和OpenAI GPT。接着介绍BERT模型是什么,它解决了之前模型的哪些问题从而可以达到这么好的效果。代码分析和案例介绍,通过解决实际问题加深理解

    3950 人正在学习 去看看 CSDN讲师

        /**

         10.3-实例方法中的self.mp4

         */

        

        /**

         

         个人认为啊,Swift中的self OC中的还要复杂一些啊

         */

        

        class MyPoint {

            var _x: Double = 0.0

            var _y: Double = 0.0

            

            func setX(x: Double, y: Double) -> Void {

                

                self._x = x

                self._y = y


                // 实际上是 self._x

//                _x = x

//                _y = y

            }

            

            func show() {

                print("_x==\(_x)  _y==\(_y)")

            }

        }

        

        var p0 = MyPoint.init()


        p0.setX(x: 10.0, y: 10.0)


        

//        setX(x: <#T##Double#>, y: <#T##Double#>)

        


   func setX(x: Double, y: Double) -> Void {

        var _x: Double = 0.0

        var _y: Double = 0.0

        

        _x = x

        _y = y

    }

    

    


10.5 Swift类方法

阅读数 268

没有更多推荐了,返回首页