iOS之Scanner基本用法
来源:互联网 发布:淘宝电脑客户端 编辑:程序博客网 时间:2024/06/05 02:48
iOS之Scanner字符串扫描类
注: 本文主要语法为Swift4.0
Scanner继承自NSObject,遵守NSCopying协议。是一个用于扫描指定字符串的抽象类
可以创建Scanner时制定他的String属性,然后scanner会按照你的要求从头到尾扫描这个字符串的每个字符
- 扫描操作从上次扫描的位置开始,并且继续往后扫描直到指定的内容出现为止(如果有的话)
1. 部分属性的相关解释
open var string: String { get } // (只读)返回当前被扫描的字符串open var scanLocation: Int// 当前扫描的位置,默认是从0开始的。通过设置这个属性值,可以自定义扫描的位置open var charactersToBeSkipped: CharacterSet?// 这个集合是用来设置我们需要跳过扫描的一个字符集合open var caseSensitive: Bool// 是否大小写敏感 public init(string: String)// 用给定扫描字符串初始化
2. 部分方法的相关解释
2-1 以下方法的作用都是
- 扫描该类型的字符串,并将扫描结果赋值给result
- 判断该字符串的第一个字符(默认第一个,可根据scanLocation属性设置)是否为该类型
open func scanInt32(_ result: UnsafeMutablePointer<Int32>?) -> Bool @available(iOS 2.0, *) open func scanInt(_ result: UnsafeMutablePointer<Int>?) -> Bool open func scanInt64(_ result: UnsafeMutablePointer<Int64>?) -> Bool @available(iOS 7.0, *) open func scanUnsignedLongLong(_ result: UnsafeMutablePointer<UInt64>?) -> Bool open func scanFloat(_ result: UnsafeMutablePointer<Float>?) -> Bool open func scanDouble(_ result: UnsafeMutablePointer<Double>?) -> Bool
2-1-1 包含纯数字的字符串
var int1: Int = 0var int64: Int64 = 0var int32: Int32 = 0var float1: Float = 0.0var double1: Double = 0.0//判断字符串包含的类型(输出结果为true)print(Scanner(string: "987").scanInt(&int1))print(Scanner(string: "897").scanInt64(&int64))print(Scanner(string: "99").scanInt32(&int32))print(Scanner(string: "90.99").scanFloat(&float1))print(Scanner(string: "98.09").scanDouble(&double1))//输出扫描后的结果int1 = 98int64 = 897int32 = 99float = 90.99double = 98.09
2-1-2 非纯数字的字符串
var int1: Int = 0let scanner = Scanner(string: "m998k23l")scanner.scanLocation = 1print(scanner.scanInt(&int1)) // true//int1 = 998var double1: Double = 0.0let scanner = Scanner(string: "ms9.98k45l")scanner.scanLocation = 1print(scanner.scanDouble(&double1)) false//double1 = 0.0
2-2 以下方法的作用都是
- 扫描字符串前缀是否是"0x"或者"0X",返回true或false
- 将0x(0X)字符后面符合十六进制数的字符串转化成十进制数(可运用到UIColor关于十六进制数的转化)
open func scanHexInt32(_ result: UnsafeMutablePointer<UInt32>?) -> Bool // Optionally prefixed with "0x" or "0X" @available(iOS 2.0, *) open func scanHexInt64(_ result: UnsafeMutablePointer<UInt64>?) -> Bool // Optionally prefixed with "0x" or "0X" @available(iOS 2.0, *) open func scanHexFloat(_ result: UnsafeMutablePointer<Float>?) -> Bool // Corresponding to %a or %A formatting. Requires "0x" or "0X" prefix. @available(iOS 2.0, *) open func scanHexDouble(_ result: UnsafeMutablePointer<Double>?) -> Bool // Corresponding to %a or %A formatting. Requires "0x" or "0X" prefix.
2-2-1 代码示例
print(Scanner(string: "xdd").scanHexInt64(&uint64)) //falseprint(Scanner(string: "0xdd").scanHexInt64(&uint64)) //trueprint(uint64) //221print(Scanner(string: "0xax").scanHexInt32(&uint32)) //trueprint(uint32) // 10print(Scanner(string: "0X991").scanHexFloat(&float1)) //trueprint(float1) //2449.0print(Scanner(string: "0X99").scanHexDouble(&double1)) //trueprint(double1) //153.0
2-3 从给定的字符串中找到相同的字符
open func scanString(_ string: String, into result: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool
代码示例
var sstring: NSString?let scan = Scanner(string: "32jingki")while !scan.isAtEnd{ // 判断是否扫描到最后 scan.scanLocation += 1 print(scan.scanLocation) scan.scanString("i", into: &sstring) print(sstring)}
2-4 Scanner的其他方法
open func scanCharacters(from set: CharacterSet, into result: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool////从scan中扫描出string放入result中,如果不需要存储string,则result传NULLopen func scanUpTo(_ string: String, into result: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool//从scan中扫描出string之外的数据放入result中,如果不需要存储string,则result传NULLopen func scanUpToCharacters(from set: CharacterSet, into result: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool//从scan中扫描出set之外的数据放入result中,如果不需要存储string,则result传NULL
2-5 关于使用Scanner处理UIColor十六进制数值的问题
- 可在UIColor的extension中添加扩展方法
/** 十六进制颜色扩充 */ convenience init?(hex : String, alpha : CGFloat = 1.0) { //1.判断字符串长度是否符合 guard hex.characters.count >= 6 else { return nil } //2.将字符串转成大写 var tempHex = hex.uppercased() //3.判断开头 if tempHex.hasPrefix("0x") || tempHex.hasPrefix("##") || tempHex.hasPrefix("0X") { //去掉开头 tempHex = tempHex.dropFirst(2) } if tempHex.hasPrefix("#") { tempHex = tempHex.dropFirst() } //4.分别截取RGB var range = NSRange(location: 0, length: 2) let rHex = (tempHex as NSString).substring(with: range) range.location = 2 let gHex = (tempHex as NSString).substring(with: range) range.location = 4 let bHex = (tempHex as NSString).substring(with: range) //5.将字符串转化成数字 emoji也是十六进制表示(此处也可用Float类型) var r : UInt32 = 0, g : UInt32 = 0, b : UInt32 = 0 //创建扫描器,将字符串的扫描结果赋值给:r,g,b Scanner(string: rHex).scanHexInt32(&r) Scanner(string: gHex).scanHexInt32(&g) Scanner(string: bHex).scanHexInt32(&b) self.init(r : CGFloat(r), g : CGFloat(g), b : CGFloat(b)) } /**RGB三原色 */ convenience init(r : CGFloat, g : CGFloat, b : CGFloat, alpha : CGFloat = 1.0) { self.init(red: r / 255.0, green: g / 255.0, blue: b / 255.0, alpha: alpha) }
阅读全文
1 0
- iOS之Scanner基本用法
- iOS之tableView基本用法
- JAVA八大基本数据类型及Scanner用法
- iOS开发之NSPredicate的基本用法
- IOS之sqlite3基本用法详解
- scanner 用法
- Scanner用法
- Scanner用法
- Scanner用法
- IOS CoreText --- 基本用法
- IOS CoreText -- 基本用法
- IOS NSFileHandle 基本用法
- iOS--CoreText基本用法
- Java输入流之BufferReader和Scanner的用法!
- Java输入流之BufferReader和Scanner的用法!
- Java IO之打印流,缓冲流,Scanner的用法
- IOS 第三方库之-Masonry 基本用法
- iOS之NSCanner的基本用法--扫描字符串
- HTML5学习笔记之音视频标签
- Swift4.0版-H5页面实现长按保存图片
- Swift4.0新特性之String、Array和Dictionary
- JavaScript基本语法01
- 升级Swift4.0遇到的坑
- iOS之Scanner基本用法
- caffe euclidean loss ignore label
- excel相关系列(3)---excel模板导出接口
- 笔记—自定义Veiw之Paint详解
- C++3
- 一道面试题引发的关于c语言中文件操作的总结
- 数据结构思维 第八章 索引器
- 大数阶乘(万进制)(HDU 1402)
- Partition算法记录