美文网首页
无规矩不成方圆

无规矩不成方圆

作者: 凉风起君子意如何 | 来源:发表于2021-12-06 16:03 被阅读0次

Swift里面有个很强大的特性叫泛型。

什么是泛型?

泛型代码让你能根据自定义的需求,编写出适用于任意类型的、灵活可复用的函数及类型。你可避免编写重复的代码,而是用一种清晰抽象的方式来表达代码的意图。

泛型的使用场景

文中给出了两个经典的例子:交换两个变量的值和栈的操作。

首先我们看交换两个Int类型变量的值:

func swapTwoInts(_ a: inout Int, _ b: inout Int) {
    let temporaryA = a
    a = b
    b = temporaryA
}

很简单,假若现在让你交换两个Double或String类型的值呢。若没泛型,我们是不是要写多个函数或在一个函数里面要写多个if判断来支持,这样一来显得既冗余也不清晰,也不简洁。

我们再来看看栈的操作:(以Int型栈举例)

struct IntStack {
    var items: [Int] = []
    mutating func push(_ item: Int) {
        items.append(item)
    }
    mutating func pop() -> Int {
        return items.removeLast()
    }
}

也很简单,但现在让你对String或Double类型的集合进行相关栈操作。你又该怎么做,是不是也是要和上面一样。很麻烦对吧。


上面两个例子都能很好的用泛型来解决,代码如下:

 // 泛型 交换两个值; T为占位符类型名;T所代表的类型由传入的值的类型推断出来
    public static func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
        let temp = a
        a = b
        b = temp
    }

struct Stack<Element> {
    var items: [Element] = []
    mutating func push(_ item: Element) {
        items.append(item)
    }
    mutating func pop() -> Element {
        return items.removeLast()
    }
}

泛型的类型约束

上面两个经典例子充分说明泛型的妙用,那泛型是不是没有任何约束了,在任何场景下都能给任何类型使用呢?答案是NO。有的场景是需要约束的,就像我们现实生活中一样,自由其实相对的,不管是开车等红绿灯,还是人多买东西的时候要排队...至少现实中的一切自由都是建立你所处的国家法律之上的。正应了那句话--无规矩不成方圆。

现在让我们来看个例子,通过一个函数找出数组中某个值的索引。(例如String数组)

func findIndex(ofString valueToFind: String, in array: [String]) -> Int? {
    for (index, value) in array.enumerated() {
        if value == valueToFind {
            return index
        }
    }
    return nil
}

将它支持泛型是这样的:

func findIndex<T>(of valueToFind: T, in array:[T]) -> Int? {
    for (index, value) in array.enumerated() {
        if value == valueToFind {
            return index
        }
    }
    return nil
}

但当你敲完代码会发现,编译报错了。是的不是所有的类型都可以用等式符比较,一些自定义类或结构体,若没有遵循Equatable协议,是无法进行等式比较的。


添加泛型约束,改成如下OK

func findIndex<T: Equatable>(of valueToFind: T, in array:[T]) -> Int? {
    for (index, value) in array.enumerated() {
        if value == valueToFind {
            return index
        }
    }
    return nil
}

相关文章

  • 7.废旧立新

    无规矩不成方圆,腐朽的规矩也当被废除。其实没有规矩,也是一种规矩,无招胜有招,招招新颖。 废除规矩,就像建立规矩一...

  • 无规矩不成方圆

    无规矩不成方圆 战国邹孟轲《孟子离娄上》:“离娄之明,公输子之巧,不以规矩,不成方圆。”“无规矩,不成方圆”...

  • 无规矩不成方圆

    脑袋里突然蹦出一句话“无规矩不成方圆”。所以今天我就和大家聊一聊“无规矩不成方圆”。“无规矩不成方圆”已经流传为一...

  • 12/11日签

    无规矩不成方圆

  • 我“无私”奉献,乐意加班,请不要逼我休息

    我“无私”奉献,甘愿加班,请不要逼我休息 【无规矩不成方圆】 无规矩不成方圆,因为有规矩才能约束人们的行为。 我们...

  • 没有规矩的家庭,比贫穷更可怕

    孟子言:“无规矩,不成方圆。” 世间万物,皆有规矩,规矩,是一种准则,更是一种分寸。 正所谓国有国法,家有家规,无...

  • 没有规矩的家庭,比贫穷更可怕(值得收藏!)

    孟子言:“无规矩,不成方圆。” 世间万物,皆有规矩,规矩,是一种准则,更是一种分寸。 正所谓国有国法,家有家规,无...

  • 规矩意识

    做人要讲规矩,无规矩不成方圆。 坏了规矩一切都变得混乱而没有秩序。 你不懂的做人的长幼之序,你就会表现得不礼貌,无...

  • 原则之逆境

    一、没有规矩,不成方圆 古人云:没有规矩,不成方圆。规矩,是专门给那些不遵守规矩的人制定的。 春秋时鲁国政府一条规...

  • 突如其来的人世,我们都是闯入者

    一:规矩与制度 对于上述标题,我们会接触很多俗语,想必“无规矩不成方圆”这句话时最开始接触的。其实无规矩不成方圆下...

网友评论

      本文标题:无规矩不成方圆

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