美文网首页iOS 开发每天分享优质文章
Swift中有用的模糊基础类型

Swift中有用的模糊基础类型

作者: iOS_小久 | 来源:发表于2019-07-03 14:37 被阅读102次

Foundation拥有大量的类,使iOS开发更容易,但我们只与其中的一些进行交互,比如DataURLSession。由于这些类型与日常使用的东西相关,因此最终比其他类型更受欢迎。但其他的呢?

有一堆基金会类型是如此情境化,人们怀疑他们甚至存在于第一位。事实上,它们很少被提及作为问题的解决方案,人们最终会使代码模仿语言中已经存在的东西。但它们存在,尽管它们已经陈旧,但大多数这些类型仍然非常有用。让我们看看其中的一些。

NSScanner

NSScanner可以逐步从基本字符串中提取数字和字符串,类似于scanf在C中的工作方式:

public func extractIntsFrom(string: String) -> [Int] {

它有许多变体,例如scanStringscanDoublescanHexInt,并且可以配置为扫描字符串中的特定位置并考虑区分大小写。当您查找特定模式(如数字)而不是具体匹配时,这是搜索字符串出现的更直接的解决方案。

事实上它来自OBJ-C意味着它不是非常Swifty(通过使用指向虚拟对象的指针在这里给出),但是你可以将它包装在一个扩展中,以使它对最终用户更好。

NSCountedSet

计算机科学中存在许多问题,需要您跟踪某个元素的数量,例如经典的anagram面试问题:

func isAnagram(_ first: String, _ second: String) -> Bool {

使用带有Int值的字典很容易解决这个问题,但我们不需要,因为这正是NSCountedSet它的作用。

func isAnagram(_ first: String, _ second: String) -> Bool {

元素可以重复添加到集合中,并检查其计数。如果计数达到零,则从集合中删除元素。countedSet.add(element)``countedSet.count(element)

CFBinaryHeap

雨燕标准库有一个臭名昭著的缺乏数据结构的,但你可以找到在基金会树和堆实现在形状CFTreeCFBinaryHeap。堆是实现优先级队列结构的一种非常有效的方式,因为它们对代码非常广泛,CFBinaryHeap可以节省您一些时间。

我正在将它添加到列表中,因为它模糊而且很酷,但我不得不说它很难使用。CFBinaryHeap是一个C CoreFoundation类,它没有桥接到Foundation,所以如果不管理大量的指针,你将无法使用它。你最好的选择是编写或使用像MCBinaryHeap这样的包装器。

let array = [8,3,5,4,1]

优先级队列在图搜索问题中很流行,可用于将效率提高到需要跟踪无序数组中最小或最大元素的任何位置。

NSCache

NSCache是一种类似于字典的集合类型,但它有两个重要的关键区别。首先,它不会复制放入其中的密钥对象,其次,它会自动从系统内存不足的条目中删除条目

删除条目的实际策略是神秘的,但如果您有创建昂贵的对象,使用它NSCache可以是常规字典缓存的非常系统友好的替代方法。以下是它如何用于缓存UIImages

final class ImageDownloader {

NSOrderedSet

当重复无关紧要时,集合非常适合跟踪元素,但由于集合访问权限为O(1),因此无法保证在执行此操作时将对它们进行排序。顾名思义,除了元素是有序的外,它的NSOrderedSet作用类似于常规。Set

let set = NSMutableOrderedSet()

因为这是一个旧类型,你会注意到它没有泛型 - 所有操作都基于Any类型。这不是很Swifty,所以你可能想把它包装成一个Swift类型:

class OrderedSet<T: Hashable>: Sequence {

NSByteCountFormatter

基金会里有大量不起眼的格式化程序,但我特别喜欢其中的一些。ByteCountFormatter将字节计数格式化为人类可读的文件大小格式 如果您的应用程序下载内容,则无用,因为您不需要手动计算这些值。

let bytes = 1024 * 1024

NSDataDetector

NSDataDetector类似于NSScanner,它的不同之处在于它从电话号码,地址和链接等字符串中提取上下文数据。

let string = "I write for https://swiftrocks.com and my phone is 555-111-111."

缺点是它再次依赖于Foundation的正则表达式API,因为它已经过时了。这也不是很快,但NSDataDetector如果你需要提取这些信息,它仍然是一个非常稳固的类型。

结论

了解它们可以帮助您防止编写不必要的代码。


扫码进交流群 有技术的来闲聊 没技术的来学习

691040931

原文转载地址:https://swiftrocks.com/useful-obscure-foundation-types-in-swift.html

相关文章

  • Swift中有用的模糊基础类型

    Foundation拥有大量的类,使iOS开发更容易,但我们只与其中的一些进行交互,比如Data和URLSessi...

  • Swift tips

    类型?什么是类型? 这是一个基础的问题,类型 (Types) 在 Swift 中是非常重要的概念,在 Swift ...

  • Swift 4.0 基础学习总结(二)

    在 Swift 4.0 基础学习总结(一)中,我们学习的Swift中的基本数据类型以及控制流,Swift简介的语法...

  • Swift基础语法(二)

    swift基础语法(一)swift基础语法二主要讲数据类型 1.字符串 1.在swift中String是一个结构体...

  • Swift--字符串--02

    字符串基础 字符串在OC与Swift中的区别:在OC中字符串类型是NNString,在Swift中字符串类型是St...

  • Swift中数据类型

    Swift类型的介绍 Swift中的类型推导 Swift中基本运算

  • Swift中数据类型

    Swift中数据类型 标签(空格分隔): Swift Swift类型的介绍 Swift中的数据类型也有:整型/浮点...

  • Swift中的值类型和参照类型

    Swift中的值类型和参照类型 Swift中的值类型和参照类型

  • Swift中的闭包详解

    转载自:Swift中的闭包(Closure) 概念 闭包在Swift中非常有用。通俗的解释就是一个Int类型里存储...

  • Programming in Swift 编程指南

    Swift 基础篇 Swift 语言基础 Swift 中的字符串和集合 Swift 中的类 Swift 中的结构体...

网友评论

    本文标题:Swift中有用的模糊基础类型

    本文链接:https://www.haomeiwen.com/subject/kcbqhctx.html