swift - 如何使功能代码更清晰和优化?

标签 swift function

func getRepeats(_ string: String, _ k: Int = 1) {
    var length = string.count

    if (k > length / 2) {
        return
    }
    sleep(2)
    for i in stride(from: 0, to: length - k, by: k) {
        var part_1 = Array(string)[i..<length] 
        var part_2 = Array(part_1)[0..<k]

        var part_3 = Array(string)[i..<length]
        var part_4 = Array(part_3)[k..<k*2]
        print(part_2, part_4)
    }

    getRepeats(string, k+1)

}

getRepeats("abcabc")

该函数显示字符串的子序列。

取而代之的是:

var part_1 = Array(string)[i..<length] 
var part_2 = Array(part_1)[0..<k]

我愿意:

part_1 = Array(string)[i..<length][0..<k]

但这不起作用,这是错误: fatal error :ArraySlice 索引超出范围(在 startIndex 之前)

也许告诉我其他有用的东西,在此先感谢!

最佳答案

两行:

let part_1 = Array(string)[i..<length]
let part_2 = Array(part_1)[0..<k]

可以合二为一:

let part_2 = Array(string)[i..<length][i..<(k+i)]

表达式Array(string)[i..<length]返回 ArraySlice .要记住的重要一点是切片的索引不一定从 0 开始。它们从您用来访问切片的任何索引开始。在这种情况下,i .

因此您的第二次访问 [0..<k]需要转移到以i开头.这给出了 [i..<(k+i)] .

关于swift - 如何使功能代码更清晰和优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57382701/

相关文章:

swift - 如何在行 Collection View 中创建 2 个单元格

php - 我应该将我的 MySQL 数据库连接放在 PHP 函数中吗?

jQuery 覆盖 $.post 函数

swift - 移动时 CAShapeLayer 消失

ios - NSEntityDescription 仅在 iPad Air 7.1 上返回 nil

ios - 如何跟踪自定义 View 外的点击

ios - 在 Swift 中按下按钮时无法识别的选择器错误

function - Delphi函数通用

javascript - 仅当元素未获得焦点时才执行函数

c - 需要创建一个返回 int 的函数,该函数基于哪个 char 参数具有更多大写字母