把Swift弄得有点像Ruby

作者: 子达如何 | 来源:发表于2016-02-19 12:08 被阅读273次

第一次接触Ruby看到这样的表达式的时候, 确实有点惊呆了

3.times { print "Hi!" }
1.upto(9) {|i| print i }
0.step(11,3) {|i| print i }
(1..9).each {|i| print i }

最近学看Swift的时候发现, Swift也可以搞得跟Ruby有点儿像.
先看看Swift里可以怎么写

        0.upto(10) { print("upto\($0)") }
        10.downto(0) { print("downto") }
        10.times { print("Hello")}
        10.times { index in print("Hello\(index)") }
        
        (1...10).each { print("each\($0)") }

当然, 你要是想直接就上这样的代码, 十有八九编译器是要报错的.
不过, 只要加上下面这一小段代码之后, 情况就好很多了.

import Foundation
extension Int {
    public func upto(to: Int, action: (Int)->Void) {
        for i in self...to {
            action(i)
        }
    }
    public func upto(to: Int, action: ()->Void) {
        for _ in self...to {
            action()
        }
    }
    public func downto(to: Int, action: (Int)->Void) {
        for i in to...self {
            action(i)
        }
    }
    public func downto(to: Int, action: ()->Void) {
        for _ in to...self {
            action()
        }
    }
    
    public func times(action: (Int)->Void) {
        for i in 0..<self {
            action(i)
        }
    }
    public func times(action: ()->Void) {
        for _ in 0..<self {
            action()
        }
    }
}

extension Range {
    public func each(action: (Range.Generator.Element) -> Void) {
        for i in self {
            action(i)
        }
    }
}

不禁感概, 这个extension也太霸道了.
再结合一点儿自定义运算符, 运算符重载什么的, 以后用Swift写的东西可不是每个懂Swift语言的人都能看得懂了:)


抛个砖先放这里, 等吃透了可变参数以及Tuple之后, 再回头看看这块砖~

或许我们可以用Python的%格式化字符串的方式来格式化Swift的字符串哦~

public func %<T: CVarArgType>(format: String, args: T) -> String {
    return String(format: format, arguments: [args])
}

public func %(format: String, args: [CVarArgType]) -> String {
    return String(format: format, arguments: args)
}
        let s1 = "Python style %d" % 10;
        print("\(s1)")
        let s2 = "Python style %d %@" % [10, "monster"];
        print("\(s2)")

这个使用形式上还有些不是完全的Python味道.

相关文章

  • 把Swift弄得有点像Ruby

    第一次接触Ruby看到这样的表达式的时候, 确实有点惊呆了 最近学看Swift的时候发现, Swift也可以搞得跟...

  • swift5 protobuf集成苹果官方版总结

    Swift-Protobuf 的安装使用总结 安装环境 Ruby MAC_Ruby 安装 - 简书 Brew M...

  • ios- (5天)OC快速转Swift心得

    1.首先要简单了解下swift的基本语法,有点像js 2.然后查看一些OC转swift的博客文章了解swift基础...

  • Cocoapods 安装及使用

    什么是 CocoaPods CocoaPods是一个用Ruby写的,用作 Swift 和 Objective-C ...

  • Swift KeyPath

    Swift KeyPath swift是一门类型安全的编程语言,不像OC、Ruby等可以在运行时检查甚至改变某一种...

  • CocoaPods概述

    CocoaPods是一个Swift和Objective-C包依赖管理工具 安装 CocoaPods通过Ruby构建...

  • 一、Cocoapods 到底是什么

    Cocoapods 到底是什么?众所周知它是 Objective-C、Swift 三方包管理工具。它与Ruby 和...

  • 强大的 shell - zsh

    正如 ruby on rails 之于 ruby,oh-my-zsh 这款插件把 zsh 这个 shell 带进了...

  • ios逆向之Cycript报错

    解决方法一:1.brew install ruby@2.02.成功后把/usr/local/Cellar/ruby...

  • Swift 中的解包操作

    在 Swift 中我们会接触到可选类型 Optional,刚开始写代码时会被变量后的 ?、!、?? 等符号弄得...

网友评论

    本文标题:把Swift弄得有点像Ruby

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