iOS问题汇总

工程组件

  1. iOS Xcode图片放入的两种方式Asset Catalogs和直接拖入

UI相关

  1. 用纯代码设置控件约束的时候,需要先将控件添加进视图层次中(addSubView)再设置约束,否则会无效或崩溃。尤其是用SnapKit和Masonry的时候要注意
  2. WKWebView的一些问题
  3. iOS9:IB上exit实现unwindSegue
  4. 设置让app不锁屏不黑屏
[[UIApplication sharedApplication] setIdleTimerDisabled: YES];
  1. iOS10中UITextField的左侧默认顶格了。想要左侧留白可直接改属性
private func addLeftWhiteView(aTextField: UITextField)
    {
        let leftV = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: currentPasswordTF.bounds.size.height))
        leftV.backgroundColor = UIColor.whiteColor()
        aTextField.leftView = leftV
        aTextField.leftViewMode = .Always
    }
  1. model小窗口的效果用sb实现


    iOS问题汇总_第1张图片
    model小窗口的效果用sb实现

swift

  1. swfit-内存管理,WEAK 和 UNOWNED - 实际使用中weak就好
  2. 可选链只要有一个?最后打印出来都是带Optional的。想要去掉Optional可以使用if let 或者 ?? ,当然强解包 ! 也可以,只是不够安全
  3. swift对异常的处理
 do
{
      try NSFileManager.defaultManager().removeItemAtURL(NSURL(fileURLWithPath: aLocalPath))
}
catch let error as NSError
{
      print(error.description)
}
  1. swift中struct重写init方法会覆盖原有的init,就不能直接stuct()这样创建对象了,只能使用自定义的。可以写一个空的init()方法来同时保留两者。
    实用场景是viewModel可以用viewModel = struct()这样来直接声明,可以不用可选项。这样给viewModel的属性赋值仍然可以调用viewModel本身的didSet方法


    iOS问题汇总_第2张图片
    自定义 和 空的init()方法可以同时保留两种创建方法
  2. swift中的compare比较相当强大,各种类型都可以
func isSelectedIndex(index: NSIndexPath) -> Bool
    {
        return mSelectedIndex?.compare(index) == .OrderedSame
    }
  1. 数组有方法contains方法用来辨识是否有某元素
guard !tagIDArray.contains(tagID) else { return }

功能

  1. 倒计时
/// 计时器
var timer: NSTimer?
/// 倒计时时长
var currentTime = 60
func makeTimer()
{
        timer = NSTimer.scheduledTimerWithTimeInterval(1, target:self, selector: #selector(HHFindPasswordViewController.getNewTime), userInfo: nil, repeats: true)
 }
  1. 获取版本号和build号
var versionStr = String()
// 版本号
guard let mainVersion: String = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"] as? String else { return }
versionStr = versionStr + mainVersion
// build号
guard let buildVersion: String = NSBundle.mainBundle().objectForInfoDictionaryKey(kCFBundleVersionKey as String) as? String else { return }
versionStr = versionStr + " build " + buildVersion
  1. 清除字符串两端的空白符
private func isValidStr(aStr: String?) -> Bool
    {
        guard let aString = aStr else { return false }
        let tempStr = aString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
        return tempStr.isEmpty ? false : true
    }
  1. 判断app的网络设置权限
private func isRestrictedNet() -> Bool
    {
        let cellularData = CTCellularData()
        var isRes = false
        cellularData.cellularDataRestrictionDidUpdateNotifier = { [weak self] state in
            switch state
            {
                case .Restricted:
                    self?.alertNetSetting()
                    isRes = true
                case .NotRestricted: fallthrough
                case .RestrictedStateUnknown: isRes = false
            }
        }
        return isRes
    }

你可能感兴趣的:(iOS问题汇总)