在 Foundation 框架中,有很多类类型(class types),它们遵循了许多协议,包括 CVarArg,这样可以在很多地方作为参数传递,特别是在像 NSPredicate 这样的需要传递多个不同类型参数的方法中。
常见的类类型
以下是一些 Foundation 中常见的类类型,它们通常会符合 CVarArg 协议,可以作为 NSPredicate 或其他类似方法的参数:
1、NSString (字符串类型)
用途:表示不可变字符串。
示例:”Hello, World!”
符合 CVarArg:可以直接作为 CVarArg 传递。
let str: NSString = "Hello, World!"
2、NSNumber (数字类型)
用途:用于包装数值数据(整数、浮动数值等),可以是 Int, Double, Float, Bool 等类型的包装。
示例:NSNumber(value: 123)
符合 CVarArg:适用于传递整数、浮动数值等。
let number: NSNumber = NSNumber(value: 123)
3、NSDate (日期类型)
用途:表示绝对时间点,通常是一个固定的日期和时间。
示例:NSDate()
符合 CVarArg:可以直接传递给方法。
let date: NSDate = NSDate()
4、NSURL (URL类型)
用途:用于表示资源的URL,通常用于文件或网络地址。
示例:NSURL(string: “https://www.example.com”)
符合 CVarArg:可以传递 URL 对象。
let url: NSURL = NSURL(string: "https://www.example.com")!
5、NSUUID (唯一标识符类型)
用途:用于生成和表示唯一的标识符。
示例:NSUUID()
符合 CVarArg:可以用作唯一标识符。
let uuid: NSUUID = NSUUID()
6、NSData / NSMutableData (数据类型)
用途:表示原始二进制数据。
示例:NSData(contentsOfFile:)
符合 CVarArg:可以作为二进制数据传递。
let data: NSData = NSData(contentsOfFile: "path/to/file")!
7、NSArray / NSMutableArray (数组类型)
用途:表示有序的元素集合,可以包含任何类型的元素。
示例:NSArray(array: [1, 2, 3])
符合 CVarArg:可以作为参数传递,通常用于组合多个值。
let array: NSArray = NSArray(array: [1, 2, 3])
8、NSDictionary / NSMutableDictionary (字典类型)
用途:表示键值对的集合。
示例:NSDictionary(dictionary: [“key”: “value”])
符合 CVarArg:可以作为键值对的集合传递。
let dict: NSDictionary = NSDictionary(dictionary: ["key": "value"])
9、NSSet / NSMutableSet (集合类型)
用途:表示无序的唯一元素集合。
示例:NSSet(objects: “apple”, “orange”, “banana”)
符合 CVarArg:适用于无序集合的场景。
let set: NSSet = NSSet(objects: "apple", "orange", "banana")
10、NSRange (范围类型)
用途:表示一个范围,通常用于表示一个子字符串的范围或数组的区间。
示例:NSRange(location: 0, length: 5)
符合 CVarArg:可用于表示范围参数。
let range: NSRange = NSRange(location: 0, length: 5)
11、NSValue (封装各种C类型数据)
用途:封装结构体类型(例如 CGPoint, CGSize, CGRect 等)。
示例:NSValue(cgPoint: CGPoint(x: 10, y: 20))
符合 CVarArg:用于封装基础数据类型,使其可以作为对象传递。
let pointValue: NSValue = NSValue(cgPoint: CGPoint(x: 10, y: 20))
12、NSAttributedString (富文本字符串)
用途:表示具有样式的文本,如颜色、字体等。
示例:NSAttributedString(string: “Hello”, attributes: [.foregroundColor: UIColor.red])
符合 CVarArg:通常用于存储有格式的文本。
let attributedString = NSAttributedString(string: "Hello", attributes: [.foregroundColor: UIColor.red])
13、NSDecimalNumber (高精度的十进制数)
用途:用于表示精确的十进制数,避免浮点数精度问题。
示例:NSDecimalNumber(value: 123.45)
符合 CVarArg:适用于财务和精确数值运算。
let decimalNumber: NSDecimalNumber = NSDecimalNumber(value: 123.45)
总结
Foundation 框架中的很多类类型都符合 CVarArg 协议,意味着可以直接在 NSPredicate、NSLog、String(format:) 等方法中传递这些类型作为参数。常见的 CVarArg 类型包括:
NSString
NSNumber
NSDate (包括 NSUUID, NSDecimalNumber 等)
NSURL
NSData
NSArray, NSDictionary, NSSet
NSValue (封装 CGPoint, CGSize, CGRect 等)
NSRange
NSAttributedString
相关文章
Core Data筛选数据的NSPredicate:https://fangjunyu.com/2025/04/10/core-data%e7%ad%9b%e9%80%89%e6%95%b0%e6%8d%ae%e7%9a%84nspredicate/