本文是我在写第一个Swift项目时,总结的小知识点
因为从OC学习而来,只是简单的学了基本语法,在准备写的过程中,问题颇多。
没有像OC系统学习,还是挺不好弄的,只能一边写一边总结,最主要查资料也挺少的,慢慢都去看文档了,英文的头大啊,逼迫我们变优秀
class GameCharacter {
var weapon: String
init() {
self.weapon = "fist"
}
init(weapon: String) {
self.weapon = weapon
}
}
class Warrior: GameCharacter {
var shield: String
init(weapon: String, shield: String) {
self.shield = shield
super.init(weapon: weapon)
}
convenience init(shield: String) {
self.init(weapon: "fist", shield: shield)
}
}
本来想着创建一个桥接文件,将OC中的宏定义文件import,但是实践证明并没有用,大概桥接文件和宏文件都是.h文件吧,所以只能写成全局常量和函数了,悲哀啊啊啊啊
https://www.cnblogs.com/JianweiWang/p/5142306.html
因为Swift并没有系统提供
func PLAYER_UIColorFromHEXA(hex: Int, alpha: CGFloat) -> UIColor {
let redValue = CGFloat((hex & 0xFF0000) >> 16)/255.0
let greenValue = CGFloat((hex & 0xFF00) >> 8)/255.0
let blueValue = CGFloat(hex & 0xFF)/255.0
return UIColor(red: redValue, green: greenValue, blue: blueValue, alpha: alpha)
}
var isDir : ObjCBool = false
var isDirExist = fileManager.fileExists(atPath: path, isDirectory:&isDir)
if !(isDirExist && isDir.boolValue) {
<#code#>
}
就只调用 CC_MD5
var origin_str = string.utf8
let digestLen = Int(CC_MD5_DIGEST_LENGTH)
let result = UnsafeMutablePointer.allocate(capacity: digestLen);
//UnsafeRawPointer指针操作
CC_MD5(UnsafeRawPointer(&origin_str), CC_LONG(strlen(string)), result);
let i = 0
let outPutStr : NSMutableString = .init(capacity: 10)
while i < CC_MD5_DIGEST_LENGTH {
outPutStr.appendFormat("%02X", result[i])
//小写x表示输出的是小写MD5,大写X表示输出的是大写MD5
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
遵守了遵守了NSCoding protoaol的所有类必须继承,像UIView和UIViewController系列的类。只是有的情况会隐式继承,而有的情况下需要显示实现。
当我们在子类定义了指定初始化器(包括自定义和重写父类指定初始化器),那么必须实现required init?(coder aDecoder: NSCoder) ,其他情况则会隐式继承
Swift用var定义的变量,和别的语言不同,不会给变量自动附初始值,所以要求必须初始化,如果不初始化就会报错(想想OC,不用只会报个警告 )
enum Optional<T> : LogicValue, Reflectable {
case None
case Some(T)
init()
init(_ some: T)
/// Allow use in a Boolean context.
func getLogicValue() -> Bool
/// Haskell's fmap, which was mis-named
func map<U>(f: (T) -> U) -> U?
func getMirror() -> Mirror
}
声明为可选类型的话,就代表它可能为nil(None),也可能有值(Some)
var configuration : VideoPlayerViewConfiguration?
var player : AVPlayer!
强制拆包,如果值为空,直接crash掉,狠啊
class VPPlayer{
override private init() {
}
//单例
private static let sharedInstance = VPPlayer()
class func shareManager() -> VPPlayer {
return sharedInstance
}
}