swift开发:常用小功能

常用小功能 - 图片(Retina Xcode Mini · [Jip](https://dribbble.com/Jip))

日常开发中,有些代码会整理成小的代码片段(snippet),但保不齐什么时候就弄丢了,唐巧大神说可以备份在GIT(《使用 Git 来管理 Xcode 中的代码片段》)上,我觉得真的是不错的办法。当然,简书也是不错的方案(虽然不支持锚点),但能够图文并茂的实现保存代码片段,才是我的最终得目的。林林总总不断增加。


索引

  • swift 项目添加OC库
  • 系统控件不显示本地语言
  • 视图跳转
  • 去掉导航栏返回按钮文字
  • 改变状态栏颜色
  • 在状态栏显示网络活动指示器
  • 启动屏幕(闪屏)显示时长
  • 标准时间转换为常规日期
  • NSDate的dateFromString总是返回nil值 - 中国夏令时问题
  • 自定义xib文件时出现警告信息【Frame for "某个对象" will be different at run time.】
  • UITextField 关闭首字母自动大写和拼写纠正
  • Directory not found for option “某个框架”
  • URL字符串编码和解码
  • 从文章正文提取第一张图片的src地址
  • 网络请求出现 App Transport Security has blocked a cleartext HTTP 错误

swift 项目添加OC库

除了使用CocoaPods工具添加第三方库,swift中还可以使用Objective-C Bridging Header配置来添加第三方库:
首先:把需要导入的库文件拖动到项目的库目录(或根目录,根据项目工程开发规范而定);

导入的库文件到项目的库目录

然后:在项目根目录下(左侧文件列表中,以当前应用的蓝色图标为根目录,黄色文件夹不是哦)新建一个AppName-OC-Bridging-Header.h的文件,然后添加引用该库的头文件;

#ifndef BookFeeds_OC_Bridging_Header_h
#define BookFeeds_OC_Bridging_Header_h

// GDataXML-HTML
#include "GDataXMLNode.h"

#endif /* BookFeeds_OC_Bridging_Header_h */

新建一个**AppName-OC-Bridging-Header.h**的文件

最后,点击当前项目配置,【TARGETS - Build Settings】,搜索【Bridging】,双击右侧区域,在弹出的浮动输入框中输入AppName-OC-Bridging-Header.h这个文件名;
配置Objective-C Bridging Header

然后就可以在项目中引用并使用了。

系统控件不显示本地语言

打开“info.plist”,添加一项“Localized resources can be mixed”,值设置为“yes”即可!


添加Localized resources can be mixed

视图跳转

页面A(HomeViewController.swift)进入页面B(InfoViewController.swift)

// 页面B入栈
let PageViewInfo = InfoViewController()
self.navigationController?.pushViewController(PageViewInfo, animated: true)

页面B返回页面A:

self.navigationController?.popViewControllerAnimated(true)

页面B进入页面C(DetialViewController.swift):

let PageViewDetial = Menu()
self.navigationController?.presentViewController(PageViewDetial, animated: true, completion: nil)

页面C返回页面B:

self.dismissViewControllerAnimated(true, completion: nil)

页面B进入页面D(CommentViewController.swift):

let PageViewComment = Menu()
self.navigationController?.pushViewController(PageViewComment, animated: true)

页面D回到页面A(回到根视图):

self.navigationController?.popToRootViewControllerAnimated(true)

去掉导航栏返回按钮文字

self.navigationController?.navigationBar.topItem?.title = ""

改变状态栏颜色

状态栏颜色的变化可以体现出一个App的设计(和开发)用心程度,是用户体验的一个参考。改变状态栏颜色的方法:
第一步:在Info.plist中设置UIViewControllerBasedStatusBarAppearance 为NO


设置 UIViewControllerBasedStatusBarAppearance 为 NO

第二步:在viewDidLoad中加一句

UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent;

状态栏颜色只有两种 DefaultLightContent

在状态栏显示网络活动指示器

// 网络活动指示器 swift 3.0
func networkActivityToggle(_ isVisible: Bool! = false) {
    DispatchQueue.main.async {
        UIApplication.shared.isNetworkActivityIndicatorVisible = isVisible
    }
}

启动屏幕(闪屏)显示时长

IOS中貌似没有设置该项的属性,通常的做法是使用时间延迟,AppDelegate文件中设置 didFinishLaunchingWithOptions 代码如下:

Thread.sleep(forTimeInterval: TimeInterval(2))

标准时间转换为常规日期

标准时间类似:Thu, 05 May 2016 07:33:34 +0000
常规时间类似:2016-05-07 21:32:25

func datetimeParse(datetime: String) -> String {
    if datetime.isEmpty {
      return ""
    }
    
    // 创建时间格式对象
    var stringTemp = datetime
    let standardFormatter = NSDateFormatter()
    standardFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
    standardFormatter.dateFormat = "EEE, d MMM yyyy HH:mm:ss Z"
    let appFormatter = NSDateFormatter()
    appFormatter.dateFormat = "yy-MM-dd HH:mm:ss"
    
    // String -> NSDate -> String
    stringTemp = appFormatter.stringFromDate((standardFormatter.dateFromString(datetime))!)
    
    return stringTemp
  }

NSDate的dateFromString总是返回nil值 - 中国夏令时问题

在英文系统语言下正常,在中文下总是返回nil,解决办法是添加格式化对象.locale = NSLocale(localeIdentifier: "en_US_POSIX")代码,请参考本文中相关的的代码。

自定义xib文件时出现警告信息【Frame for "某个对象" will be different at run time.】

如果定义的约束显示为蓝色,通常是没有问题的,但如果是红色就需要注意了。修复这些警告,可以选择更新约束。


更新约束

UITextField 关闭首字母自动大写和拼写纠正

feedInput.autocapitalizationType = .None
feedInput.autocorrectionType = .No

Directory not found for option “某个框架”

在项目的【Building Settings】【Framework Search Path】中清除相关的错误链接即可.,两个都要清除:


Framework Search Path

URL字符串编码和解码

如果在和服务器的数据传输中需要用到域名信息,我们需要把域名中的特殊字符进行转义后才可以在服务器端正确接收和使用。

// 编码
let urlString: String = "http://feed.iplaysoft.com/"
let a = urlString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.alphanumericCharacterSet())
print(a)

// 解码
let b = a?.stringByRemovingPercentEncoding
print(b)

输出:

http%3A%2F%2Ffeed%2Eiplaysoft%2Ecom%2F
http://feed.iplaysoft.com/

服务器端通常有适合的URL解码方法,如PHP的urldecode方法。

从文章正文提取第一张图片的src地址。

// 从文章正文提取第一张图片的src地址
func getThumb(content: String) -> String {
  var thumbURLString: String = ""
  
  // 创建正则
  let thumbPattern = try! NSRegularExpression(pattern: "[^\\'|\\"]+(?:jpg|png)", options: .CaseInsensitive)
  let thumbRanges = thumbPattern.matchesInString(content, options: .ReportProgress, range: NSRange(location: 0, length: content.characters.count) )
  
  if !thumbRanges.isEmpty {
    thumbURLString = NSString(string: content).substringWithRange(thumbRanges[0].range)
  }
  
  return thumbURLString
}

网络请求出现 App Transport Security has blocked a cleartext HTTP 错误

新特性要求App内访问网络请求,要采用 HTTPS 协议。解决办法:

  • 在Info.plist中添加 NSAppTransportSecurity 类型 Dictionary ;
  • 在 NSAppTransportSecurity 下添加 NSAllowsArbitraryLoads 类型Boolean ,值设为 YES;
NSAppTransportSecurity
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,103评论 4 62
  • 兔子先生年近三十,微胖。近来兔子先生有点情场不顺,或者说他一直没有情场得意过。高中时代,和所有不同于因为长得帅而受...
    拊孤掌阅读 344评论 0 2
  • 和骆时相约见面那天,她依旧穿着一身黑色的运动衣,江姜对着镜子涂抹口红,“你一定是只有这一身衣服,我知道。”她抿抿嘴...
    121跑起来阅读 452评论 2 1
  • 倒映的垂柳婀娜 落日的余晖羞红的脸 绿荷流淌着生命的颜色 莲花绽放着热情的火焰 离别后的重聚 一样的笑语不一样的沉...
    香自苦寒阅读 213评论 2 3