Swift小技巧(二)

.如何解决闭包内部的循环引用问题
 //通过定义捕获列表解决
lazy var someClosure: Void -> String = {
    //unowned:无主引用  weak:弱引用
    [unowned self, weak delegate = self.delegate!] in
    // 这里是闭包的函数体
}
    
.如何获得某个变量的类型字符串
 let string = "Hello"
let stringArray = ["one", "two"]
let dictionary = ["key": 2]

//打印具体内容
print(string)//Hello
print(stringArray)//["one", "two"]
print(dictionary)//["key": 2]
//打印类型
print(type(of: string))//"String"
print(type(of: stringArray))//Array<String>
print(type(of: dictionary))//Dictionary<String, Int>
//获得类型字符串
String(describing: type(of: string)) // "String"
String(describing: type(of: stringArray)) // "Array<String>"
String(describing: type(of: dictionary)) // "Dictionary<String, Int>"
//获得完整的类型字符串
String(reflecting: type(of: string)) // "Swift.String"
String(reflecting: type(of: stringArray)) // "Swift.Array<Swift.String>"
String(reflecting: type(of: dictionary)) // "Swift.Dictionary<Swift.String, Swift.Int>"
    
.如何查找数组内部某个元素或者某些元素
 class Person {
    let name: String
    let age: Int
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}
let p1 = Person(name: "a", age: 1)
let p2 = Person(name: "b", age: 2)
let p3 = Person(name: "c", age: 3)
let p4 = Person(name: "c", age: 31)
let array = [p1,p2,p3,p4]
//可以获得p1的下标为0
var result = array.firstIndex { $0 === p1 }
print(result!)
//通过元素内部的某个属性来查找index
result = array.firstIndex { $0.name == "c" }
print(result!)
//index只会返回第一个查找到的,查找多个,需要使用filter
let contents = array.filter { $0.name == "c" }
contents.count//contents会包含所有name=c的值
生成指定位数的整数或者小数,不足位数以0补充
 //指定位数字,不足的位数以0补充
extension Int {
    func format(f: String) -> String {
        return String(format: "%\(f)d", self)
    }
}
//保留指定位小数,不足位数以0补充
extension Double {
    func format(f: String) -> String {
        return String(format: "%\(f)f", self)
    }
}
//使用
print(8.format(f: "06"))//000008
print(8.format(f: "02"))//08
print(9999.format(f: "02"))//9999
print(0.12345.format(f: ".2"))//0.12
print(0.1.format(f: ".4"))//0.1000
    
对数组内元素,按照指定属性指定规则进行排序
 struct ImageFile {
    var name: String
    var ID: Int
}

let image1 = ImageFile(name: "a.jpg", ID: 3)
let image2 = ImageFile(name: "c.jpg", ID: 2)
let image3 = ImageFile(name: "b.jpg", ID: 1)
var images = [image1, image2, image3]
images.sort { $0.ID > $1.ID }//从大到小排序
images.sort { $0.name < $1.name }//从小到大排序
    
如何替换字符串中某个特定字符
 let string = "This is my string"
//替换" "成"-",最终结果为:"This-is-my-string"

//方法一
let newString1 = string.replacingOccurrences(of: " ", with: "-")
//方法二
let toArray = string.components(separatedBy: " ")
let newString2 = toArray.joined(separator: "+")
//方法三
let newString3 = String(string.characters.map {
    $0 == " " ? "+" : $0
})
    
如何发出http请求

ss1

 let url = URL(string: "http://www.baidu.com")
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
    print(String(data: data!, encoding: .utf8))
}
task.resume()
    
如何修改imageview中image的颜色

ss1

 override func viewDidLoad() {
        super.viewDidLoad()
        let imageView = UIImageView(frame: CGRect(x: 10, y: 100, width: 20, height: 20))
        imageView.image = UIImage(named: "ADD")
        changeTintColor(imageView: imageView, color: .red)
        view.addSubview(imageView)
    }
    
    func changeTintColor(imageView: UIImageView, color: UIColor) {
        imageView.image = imageView.image!.withRenderingMode(.alwaysTemplate)
        imageView.tintColor = color
    }
    
posted @ 2020-10-10 16:41  怕腥的鱼  阅读(197)  评论(0编辑  收藏  举报