as! 和 as? 用法
- 某类型的一个常量或变量可能在幕后实际上属于一个子类。当确定是这种情况时,你可以尝试向下转到它的子类型,用类型转换操作符(as? 或 as!)。
- 当你不确定向下转型可以成功时,用类型转换的条件形式( as? )。条件形式的类型转换总是返回一个可选值,并且若下转是不可能的,可选值将是 nil 。
- 只有你可以确定向下转型一定会成功时,才使用强制形式( as! )。当你试图向下转型为一个不正确的类型时,强制形式的类型转换会触发一个运行时错误。
宏定义
- 简单的宏定义直接使用let 加常量名即可
public let ScreenRect = UIScreen.main.bounds
public let ScreenWidth = UIScreen.main.bounds.size.width
public let ScreenHeight = UIScreen.main.bounds.size.height
- 有些需要传值的宏定义就只能用方法来取代了
func ViewX(view:UIView) -> Float {
return Float(view.frame.origin.x)
}
func ViewY(view:UIView) -> Float {
return Float(view.frame.origin.y)
}
func ViewWidth(view:UIView) -> Float {
return Float(view.frame.size.width)
}
func ViewHeight(view:UIView) -> Float {
return Float(view.frame.size.height)
}
判断字符串是否为空
swift已经提供了方法,不用像以前一样判断是否是nil或者NSNull类型,只需要用到str.isEmpty就可以了
let str = "asdasd"
if str.isEmpty {
print("字符串为空")
}else{
print("")
}
swift五种修饰符fileprivate private internal public open
- private,只允许在当前类中调用,不包括 Extension
用 private 修饰的属性和方法不可以被代码域之外的地方访问
下面这段代码会报错,在类Bbbb中无法访问类Aaaa中的test方法
class Aaaa {
private func test(){}
}
class Bbbb:Aaaa {
func show(){
let a = A.init()
a.test()
}
}
- fileprivate其修饰的属性或者方法只能在当前的 Swift 源文件里可以访问
即在同一个文件中,所有的 fileprivate 方法属性都是可以访问到的
上面的代码如果将private修改为fileprivate就不会报错了 - internal,默认访问,internal修饰的属性或方法在源代码所在的整个模块都可以访问
如果是框架或库代码,在整个框架内部都可以访问,在框架外部则不可以访问
如果是APP代码,则在整个APP内部都可以访问 - public 修饰的属性或者方法可以在其他作用域被访问
但不能在重载 override 中被访问
也不能在继承方法中的 Extension 中被访问 - open 修饰的属性或者方法可以在其他作用域被访问
修饰的属性或者方法可以在其他作用域被继承或重载 override