Swift 3 收集的小知识点

1.条件判断区间

#pragma mark   ==============条件判断区间==============
let age = 19
if 18...25 ~= age {
    print("条件满足")
}
同
if age >= 18 && age <= 25 {
    print("条件满足")
}
同
if case 18...25 = age {
    print("条件满足")
}

2.多标志符字符串分割成数组

#pragma mark   ==============多标志符字符串分割==============
let text = "abc,vfr.yyuu"
let set = CharacterSet(charactersIn: ",.")
print(text.components(separatedBy: set)) 
// ["abc", "vfr", "yyuu"]

3.字符串是否为空

#pragma mark   ==============字符串是否为空==============
Non-Optional String
Check for zero length.

let myString: String = ""

if myString.isEmpty {
    print("String is empty.")
    return // or break, continue, throw
}

// myString is not empty (if this point is reached)
print(myString)

Optional String
Check for nil or zero length.
let myOptionalString: String? = nil

guard let myString = myOptionalString, !myString.isEmpty else {
    print("String is nil or empty.")
    return // or break, continue, throw
}

/// myString is neither nil nor empty (if this point is reached)
print(myString)

4.字符串是否包含空格

#pragma mark   ==============字符串是否包含空格==============
Here is how I check if string is blank. By 'blank' I mean a string that is either empty or contains only space/newline characters.
struct MyString {
  static func blank(text: String) -> Bool {
    let trimmed = text.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
    return trimmed.isEmpty
  }
}
How to use:
MyString.blank(" ") // true

5.数组元素求和

#pragma mark   ==============可变参数累加,数组元素求和==============
func sum(input: Int...) -> Int {
            return input.reduce(0, +)
        }
print(sum(input: 1,2,3,4,5)) // 15

let arr: [Int] = [1, 2, 3]
print(arr.reduce(0, +))

// 字符串数组累加
let ss: [String] = ["hon", "zon", "-0"]
print(ss.reduce("", +))
// 输出:honzon-0

6.字符串是否包含数组中的元素

#pragma mark   ==============字符串是否包含数组中的元素==============
let words = ["Swift","iOS","cocoa","OSX","tvOS"]
let tweet = "This is an example tweet larking about Swift"
let valid = !words.filter ({ tweet.contains($0)}).isEmpty
或者
let valid2 = words.contains(where: tweet.contains)
print(valid)

7.导航栏返回图标

#pragma mark   ==============导航栏返回图标==============
self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named:"find")
self.navigationController?.navigationBar.backIndicatorImage = UIImage(named:"find")

8.画虚线

#pragma mark   ==============画虚线==============
func drawDottedLine(lineView: UIView, offset: CGPoint) {
        let shapeLayer = CAShapeLayer()
        shapeLayer.bounds = lineView.bounds
        shapeLayer.position = lineView.layer.position
        shapeLayer.fillColor = nil
        shapeLayer.strokeColor = UIColor.blue.cgColor
        shapeLayer.lineWidth = 0.5
        shapeLayer.lineJoin = kCALineJoinRound
        // 4=线的宽度 1=每条线的间距
        shapeLayer.lineDashPattern = [NSNumber(value: 4), NSNumber(value: 1)]
        let path = CGMutablePath()
        
        path.move(to: CGPoint(x: offset.x, y: offset.y))
        path.addLine(to: CGPoint(x: lineView.frame.width - offset.x, y: offset.y))
        
        shapeLayer.path = path
        lineView.layer.addSublayer(shapeLayer)
    }

9.部分圆角图片

#pragma mark   ==============部分圆角图片==============
func cornerImage(frame: CGRect, image: UIImage, Radii: CGSize) -> UIImageView {
        let imageView = UIImageView(image: image)
        imageView.frame = frame
        let bezierPath = UIBezierPath(roundedRect: imageView.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: Radii)
        let shapeLayer = CAShapeLayer()
        shapeLayer.path = bezierPath.cgPath
        imageView.layer.mask = shapeLayer
        return imageView
    }

10.修改状态栏背景颜色

#pragma mark   ==============修改状态栏背景颜色==============
func setStatusBarBackgroundColor(color: UIColor) {
        let statusBarWindow = UIApplication.shared.value(forKey: "statusBarWindow") as? UIView
        guard  let statusBar = statusBarWindow?.value(forKey: "statusBar") as? UIView else {
            return
        }
        statusBar.backgroundColor = color
    }

11.UIImage加载

#pragma mark   ==============UIImage加载==============
UIImage(named: "imageName")// caching 
UIImage(contentsOfFile: "imageName")// no caching 
如果你要加载一个大图片而且是一次性使用,那么就没必要缓存这个图片,用contentsOfFile足矣,这样不会浪费内存来缓存它。
然而,在图片反复重用的情况下named是一个好得多的选择。

12.UIButton响应区域大小

#pragma mark   ==============UIButton响应区域44*44==============
extension UIButton {
    //处理button太小
    open override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        // if the button is hidden/disabled/transparent it can't be hit
        if self.isHidden || !self.isUserInteractionEnabled || self.alpha < 0.01 { return nil }
        // increase the hit frame to be at least as big as `minimumHitArea`
        let buttonSize = bounds.size
        let widthToAdd = max(44 - buttonSize.width, 0)

        let heightToAdd = max(44 - buttonSize.height, 0)
        let largerFrame = bounds.insetBy(dx: -widthToAdd / 2, dy: -heightToAdd / 2)
        // perform hit test on larger frame
        return largerFrame.contains(point) ? self : nil
    }
}

13.忽略警告

pragma mark   ==============忽略警告==============
public extension Bool {
    // 默认情况下编译器就是会去检查返回参数是否有被使用,没有的话就会给出警告。如果你不想要这个警告,可以自己手动加上 @discardableResult
    @discardableResult public mutating func m_toggle() -> Bool {
        self = !self
        return self
    }
}

14.IBDesignable/IBInspectable 可视化xib/storyboard 属性设置

示例
// IBDesignable/IBInspectable,是iOS8的新特性。其主要功能是可以直接在XIB或者Storyboard中直接,设置UI类的属性。例如我们自定义一些控件,可以把控件的属性映射到XIB上
简单的说,就是自定义View的属性,可视化,在xib/Storyboard中可设置,主要用于复杂控件属性的设置
@IBDesignable
class RatingBar: UIView {
    @IBInspectable var  ratingMax: CGFloat = 10    //总分
    @IBInspectable var starNums: Int = 5        //星星总数
    //分数
    @IBInspectable var rating: CGFloat = 0 {
        didSet {
            if 0 > rating { rating = 0 }
            else if ratingMax < rating { rating = ratingMax }
            //回调给代理
            self.setNeedsLayout()
        }
    }
    
    @IBInspectable var imageLight: UIImage = UIImage(named: "ratingbar_star_light")!
    @IBInspectable var imageDark: UIImage = UIImage(named: "ratingbar_star_dark")!
    
    @IBInspectable var canAnimation: Bool = false    //是否开启动画模式
    @IBInspectable var animationTimeInterval: TimeInterval = 0.2 //动画时间
    @IBInspectable var isIndicator: Bool = false    //是否是一个指示器 (用户无法进行更改)
    
    private var foregroundRatingView: UIView!
    private var backgroundRatingView: UIView!
    
    private var isDrew = false    //是否创建过
    
    override init(frame: CGRect) {
        super.init(frame: frame)
       // self.buildView()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}
demo.png
/// 遍历删除subView
self.subviews.forEach({$0.removeFromSuperview()})
/// 打开设置界面
let urlObj = URL(string:UIApplicationOpenSettingsURLString)
if #available(iOS 10.0, *) {
      UIApplication.shared.open(urlObj! as URL, options: [ : ], completionHandler: { Success in

    })} else {
         UIApplication.shared.openURL(urlObj!)
     }
 }

15.颜色输入(即视功能)

color2.png
color.png

16.图片输入(即视功能)

  • 1.同颜色输入一样,代码直接输入image literal,左键双击缩略图标
image.png
  • 2.直接写图片名称
image2.png

原文链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容