1.如何解析html字符串中的特殊字符为正常显示的字符
//扩展一个方法,用于解析出html字符
extension String {
init(htmlEncodedString: String) {
self.init()
guard let encodedData = htmlEncodedString.data(using: .utf8) else {
self = htmlEncodedString
return
}
let attributedOptions: [String : Any] = [
NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue
]
do {
let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil)
self = attributedString.string
} catch {
print("Error: \(error)")
self = htmlEncodedString
}
}
}
let string = "The Weeknd ‘King Of The Fall’"
print(String(htmlEncodedString: string))//The Weeknd ‘King Of The Fall’
2.如何使手机震动?
import AudioToolbox
//使手机震动
AudioServicesPlayAlertSound(SystemSoundID(kSystemSoundID_Vibrate))
3.如何注册cell到集合视图中
//swift
collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "ReuserIdentifier")
4.如何实现指定范围内,倒序使用,比如1...5,从5开始倒序使用
for i in (1...5).reversed() {
print(i)//5 4 3 2 1
}
//或者
for i in stride(from: 5, to: 0, by: -1) {
print(i)//5 4 3 2 1
}
5.Data与Image之间如何互相转换
let image = UIImage(named: "a.png")
//image->data
let data = UIImagePNGRepresentation(image!)
//data->image,scale表示缩放比例,1表示原图
let imagePt = UIImage(data: data!, scale: 1)
6.角度与弧度之间如何转换
extension Int {
//角度->弧度
var degreesToRadians: Double { return Double(self) * .pi / 180 }
}
extension FloatingPoint {
//角度->弧度
var degreesToRadians: Self { return self * .pi / 180 }
//弧度->角度
var radiansToDegrees: Self { return self * 180 / .pi }
}
//使用
45.degreesToRadians // 0.7853981633974483
Double(45).degreesToRadians // 0.7853981633974483
CGFloat(45).degreesToRadians // 0.785398163397448
Float(45).degreesToRadians // 0.7853981
Float80(45).degreesToRadians // 0.785398163397448278999
7.如何解决问题:directory not found for option '-F/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.0.sdk/Developer/Library/Frameworks'
首先找到生成错误的目标,然后删除“框架搜索路径”构建设置中的路径来消除这些错误。
53vpB.png
8.如何将数组内元素通过指定字符连接成字符串
//将数组内元素通过指定字符连接成字符串
let array = ["str1", "str2", "str3", ""]
array.joined(separator: "-")//str1-str2-str3
//如果需要过滤掉为空或者特定的元素
let new = array.filter { $0 != "" }
new.joined(separator: "-")
9.函数和方法如何返回多个值
//返回一个元组来解决
func getTime() -> (Int, Int, Int) { ... return ( hour, minute, second)}
//然后它被调用为:
let (hour, minute, second) = getTime()
//要么:
let time = getTime()println("hour: \(time.0)")
10.如何跳转到系统设置指定页面,比如通用设置,wifi设置等
首先,在URL Types的URL Schemes中添加App-Prefs字符。
屏幕快照 2017-06-12 下午2.23.47.png
然后在要跳转的地方使用:
UIApplication.shared.open(URL(string:"App-Prefs:root=General")!, options: [:]) {
if $0 {
print("打开成功!");
}else {
print("打开失败!");
}
}
11.如何添加高斯模糊效果
let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = view.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
view.addSubview(blurEffectView)
12.如何限制uitextfield字符的输入个数
@IBOutlet weak var field: UITextField!
//限制输入10个字符
let limitLength = 10
override func viewDidLoad() {
super.viewDidLoad()
field.delegate = self
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let text = textField.text else { return true }
let newLength = text.characters.count + string.characters.count - range.length
return newLength <= limitLength
}
13.如何对两个数组进行比较操作,比如求相同、不同部分
let array1 = ["a", "b", "c"]
let array2 = ["a", "b", "d"]
let set1: Set<String> = Set(array1)
let set2: Set<String> = Set(array2)
set1.union(set2)//a b c d
set1.intersection(set2)//a b
set1.symmetricDifference(set2)//d c
14.如何判断一个可选字符串是nil还是空字符串
var str: String?
//判断str是否为Nil或者为空字符串
(str ?? "").isEmpty//true
//判断str是否为nil或者为空字符串,如果是返回“默认”
(str ?? "").isEmpty ? "默认" : str!//默认
15.如何创建出纯色的UIImage
public extension UIImage {
public convenience init?(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) {
let rect = CGRect(origin: .zero, size: size)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
color.setFill()
UIRectFill(rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
guard let cgImage = image?.cgImage else { return nil }
self.init(cgImage: cgImage)
}
}
//指定颜色和image大小
let redImage200x200 = UIImage(color: .redColor(), size: CGSize(width: 200, height: 200))
16.如何通过button的addTarget传递附加参数
可以自定义一个button集成子button
class subclassedUIButton: UIButton {
var indexPath: Int?
var urlString: String?
}
这样子,在addTarget方法中,就可以使用button新添加的属性获得附加参数。
17.如何将字符串拆分为字符数组
let str = "hello"
let arr = Array(str.characters)
print(arr)
18.如何判断一个弹出视图是模态弹出还是导航堆栈弹出
func isModal() -> Bool {
if self.presentingViewController != nil {
return true
} else if self.navigationController?.presentingViewController?.presentedViewController == self.navigationController {
return true
} else if self.tabBarController?.presentingViewController is UITabBarController {
return true
}
return false
}
19.如何检查指定文件是否存在
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let url = NSURL(fileURLWithPath: path)
let filePath = url.appendingPathComponent("nameOfFileHere")?.path
let fileManager = FileManager.default
if fileManager.fileExists(atPath: filePath!) {
print("FILE AVAILABLE")
} else {
print("FILE NOT AVAILABLE")
}
20.如何实现,子类必须要实现某个方法
1.使用协议
protocol SomeProtocol {
func someMethod()
}//继承该协议的类,必须要实现该方法
2.或者在父类的方法中,使用断言
class SuperClass {
func someFunc() {
fatalError("Must Override")
}
}//如果子类没有重写该方法,就会触发断言