工程组件
UI相关
- 用纯代码设置控件约束的时候,需要先将控件添加进视图层次中(addSubView)再设置约束,否则会无效或崩溃。尤其是用SnapKit和Masonry的时候要注意
- WKWebView的一些问题
- iOS9:IB上exit实现unwindSegue
- 设置让app不锁屏不黑屏
[[UIApplication sharedApplication] setIdleTimerDisabled: YES];
- 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
}
-
model小窗口的效果用sb实现
swift
- swfit-内存管理,WEAK 和 UNOWNED - 实际使用中weak就好
- 可选链只要有一个?最后打印出来都是带Optional的。想要去掉Optional可以使用if let 或者 ?? ,当然强解包 ! 也可以,只是不够安全
- swift对异常的处理
do
{
try NSFileManager.defaultManager().removeItemAtURL(NSURL(fileURLWithPath: aLocalPath))
}
catch let error as NSError
{
print(error.description)
}
-
swift中struct重写init方法会覆盖原有的init,就不能直接stuct()这样创建对象了,只能使用自定义的。可以写一个空的init()方法来同时保留两者。
实用场景是viewModel可以用viewModel = struct()这样来直接声明,可以不用可选项。这样给viewModel的属性赋值仍然可以调用viewModel本身的didSet方法
- swift中的compare比较相当强大,各种类型都可以
func isSelectedIndex(index: NSIndexPath) -> Bool
{
return mSelectedIndex?.compare(index) == .OrderedSame
}
- 数组有方法contains方法用来辨识是否有某元素
guard !tagIDArray.contains(tagID) else { return }
功能
- 倒计时
/// 计时器
var timer: NSTimer?
/// 倒计时时长
var currentTime = 60
func makeTimer()
{
timer = NSTimer.scheduledTimerWithTimeInterval(1, target:self, selector: #selector(HHFindPasswordViewController.getNewTime), userInfo: nil, repeats: true)
}
- 获取版本号和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
- 清除字符串两端的空白符
private func isValidStr(aStr: String?) -> Bool
{
guard let aString = aStr else { return false }
let tempStr = aString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
return tempStr.isEmpty ? false : true
}
- 判断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
}