美文网首页
swift开发小知识总结

swift开发小知识总结

作者: 蛋哥是只猫 | 来源:发表于2018-10-22 19:04 被阅读0次

总结一些在项目中遇到的问题,记录下来方便以后使用以防遗忘,会持续的增加

  1. 遇到一个问题,在window上添加了一个View,使用bringSubview(toFront:)置顶也显示不出来,看图层的时候发现上面还有一个view覆盖在上面。 解决方案:使用layer的zPosition属性,设置其layer的显示层次
view.layer.zPosition = 99 // 设置一个比较大的值就OK
  1. 创建了一个UIView,但是无论怎么都无法响应事件,后来发现是因为在创建的时候没有确保其在主线程
   DispatchQueue.main.async {
//  你的代码
}

3、使用UITextView时,进入页面时不能够滚动,但是输入文字换行后可以滚动,解决方法

  override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        let str = self.textView.text
        let h = str.boundingRect(with: size, options: .usesLineFragmentOrigin, attributes: attributes, context:nil).size.height
        self.textView.contentSize = CGSize(width: 0, height: h!+5)
        return super.hitTest(point, with: event)
    }

4、 最短编辑距离

    fileprivate func distance(ticket:String,scan:String)->Int{
        var db = Array(repeating: Array(repeating: 0, count: scan.count + 1), count: ticket.count + 1)
        if ticket.count <= 0 {
            return db[ticket.count][scan.count]
        }
        if scan.count <= 0 {
            return db[ticket.count][scan.count]
        }
        for i in 1..<ticket.count+1 { //初始化第一列
            db[i][0] = I
        }
        for j in 1..<scan.count+1{ //初始化第一行
            db[0][j] = j
        }
        db[0][0] = 0
        for i in 1..<ticket.count+1{
            let ticketIndex = ticket.index(ticket.startIndex, offsetBy: i-1)
            let ticketChars = ticket[ticketIndex]
            for j in 1..<scan.count+1{
                let scanIndex = scan.index(scan.startIndex, offsetBy: j-1)
                let scanChars = scan[scanIndex]
                if ticketChars == scanChars {
                    db[i][j] = db[i - 1][j - 1]
                }else{
                    db[i][j] = min(db[i - 1][j - 1], min(db[i][j - 1], db[i - 1][j]))+1
                }
            }
        }
        return  db[ticket.count][scan.count]
    }

测试数据

      var result = distance(ticket: "12345", scan: "12345")
        print("1---\(result)")
        result = distance(ticket: "12345", scan: "678")
        print("2---\(result)")
        result = distance(ticket: "12345", scan: "098789")
        print("3---\(result)")
        result = distance(ticket: "12345", scan: "zusuuuunl")
        print("4---\(result)")

结果打印


image.png

5、字符串切割

        let temp = "36789"
        let tempIndex = temp.index(temp.startIndex, offsetBy: 1)
        let tempChars = temp[tempIndex]

打印结果
“6”

6、关于gem镜像变更
https://gems.ruby-china.org 变更为https://gems.ruby-china.com

image.png

7、闰年计算规则
     判断闰年规则
         1)普通年能被4整除而不能被100整除的为闰年。(如2004年就是闰年,1900年不是闰年)
         2) 世纪年能被400整除而不能被3200整除的为闰年。(如2000年是闰年,3200年不是闰年)

         if yearValue%100 == 0 {
                if (yearValue%400 == 0 ) && (yearValue%3200 != 0){
                  // 为闰年
                }else{
                   // 为平年
                }
            }else{
                if (yearValue%4 == 0) && (yearValue%100 != 0){
                    // 为闰年
                }else{
                    // 为平年
                }
            }

9、iPhone has denied the launch request. 发现因为手欠将证书设置为始终信任

10、tableview变高刷新跳动解决方案

        UIView.setAnimationsEnabled(false)
        self.tableView?.beginUpdates()
// 刷新tableview
        self.tableView?.endUpdates()
        UIView.setAnimationsEnabled(true)

相关文章

网友评论

      本文标题:swift开发小知识总结

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