美文网首页
在Swift3.0 下获取手机设备存储大小

在Swift3.0 下获取手机设备存储大小

作者: NicWhite | 来源:发表于2017-01-07 12:23 被阅读258次

    本来这些在OC也可以实现,而且可以用桥接的方式来达到Swift使用,但是本着完全Swift 化的思想,还是想用纯Swift 方法来实现,以下是具体实现代码
    给UIDevice 类写了一个扩展

    import UIKit
    extension UIDevice{
      
      func blankof<T>(type:T.Type) -> T {
        let ptr = UnsafeMutablePointer<T>.allocate(capacity: MemoryLayout<T>.size)
        let val = ptr.pointee
        ptr.deinitialize()
        return val
      }
      
      /// 磁盘总大小
      var TotalDiskSize:Int64{
        var fs = blankof(type: statfs.self)
        if statfs("/var",&fs) >= 0{
          return Int64(UInt64(fs.f_bsize) * fs.f_blocks)
        }
        return -1
      }
      
      /// 磁盘可用大小
      var AvailableDiskSize:Int64{
        var fs = blankof(type: statfs.self)
        if statfs("/var",&fs) >= 0{
          return Int64(UInt64(fs.f_bsize) * fs.f_bavail)
        }
        return -1
      }
      
      /// 将大小转换成字符串用以显示
      func fileSizeToString(fileSize:Int64) -> String{
        
        let fileSize1 = CGFloat(fileSize)
        
        let KB:CGFloat = 1024
        let MB:CGFloat = KB*KB
        let GB:CGFloat = MB*KB
        
        if fileSize < 10
        {
          return "0 B"
          
        }else if fileSize1 < KB
        {
          return "< 1 KB"
        }else if fileSize1 < MB
        {
          return String(format: "%.1f KB", CGFloat(fileSize1)/KB)
        }else if fileSize1 < GB
        {
          return String(format: "%.1f MB", CGFloat(fileSize1)/MB)
        }else
        {
          return String(format: "%.1f GB", CGFloat(fileSize1)/GB)
        }
      }
    }
    

    用的时候就比较简单了

    print(UIDevice.current.fileSizeToString(fileSize: UIDevice.current.AvailableDiskSize))
        print(UIDevice.current.fileSizeToString(fileSize: UIDevice.current.TotalDiskSize))
    
        print(UIDevice.current.AvailableDiskSize)
        print(UIDevice.current.TotalDiskSize)
    

    相关文章

      网友评论

          本文标题:在Swift3.0 下获取手机设备存储大小

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