extension.swift 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. //
  2. // extension.swift
  3. // AIPaint
  4. //
  5. // Created by Fengyu He on 2022/12/2.
  6. //
  7. import CommonCrypto
  8. import UIKit
  9. extension String {
  10. var sha256: String {
  11. let utf8 = cString(using: .utf8)
  12. var digest = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
  13. CC_SHA256(utf8, CC_LONG(utf8!.count - 1), &digest)
  14. return digest.reduce("") { $0 + String(format:"%02x", $1) }
  15. }
  16. func encodeBase64() -> String {
  17. if let data = self.data(using: .utf8) {
  18. return data.base64EncodedString()
  19. }
  20. return ""
  21. }
  22. func decodeBase64() -> String? {
  23. if let data = Data(base64Encoded: self) {
  24. return String(data: data, encoding: .utf8)
  25. }
  26. return nil
  27. }
  28. }
  29. extension UIImageView {
  30. func downloadedFrom(url: URL, contentMode mode: UIView.ContentMode = .scaleAspectFit) {
  31. contentMode = mode
  32. URLSession.shared.dataTask(with: url) { data, response, error in
  33. guard
  34. let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
  35. let mimeType = response?.mimeType, mimeType.hasPrefix("image"),
  36. let data = data, error == nil,
  37. let image = UIImage(data: data)
  38. else { return }
  39. DispatchQueue.main.async() {
  40. self.image = image
  41. }
  42. }.resume()
  43. }
  44. func downloadedFrom(link: String, contentMode mode: UIView.ContentMode = .scaleAspectFit) {
  45. guard let url = URL(string: link) else { return }
  46. downloadedFrom(url: url, contentMode: mode)
  47. }
  48. }