gpt4 book ai didi

swift - 带有嵌套 if 循环的 swift 函数中 Unresolved 标识符错误

转载 作者:行者123 更新时间:2023-11-28 13:31:03 25 4
gpt4 key购买 nike

我目前正在自学 Swift,最近有 Python 背景,最初是 Visual Basic。我会形容自己精通这些代码,但在 Swift 方面是个新手。我正在尝试编写一个函数,它将从长整数的开头或结尾返回一组数字。我选择的方法是将整数转换为字符串,然后使用前缀或后缀命令。

虽然如果函数没有流控制并使用前缀或后缀(第一批代码),我可以使该函数工作,但当我尝试编写一个同时执行这两种操作的函数时,我在 turnStringToInteger 变量上遇到 Unresolved 标识符错误(第二批代码)。我很确定这是因为变量位于 if {} 中,但如果我在 if 循环之外声明它(散列),这也会出错。我很欣赏这将有一个非常简单的答案,但是如何在嵌套的 if 循环中正确使用返回值?

这有效...

//Function to Trim Integer (Prefix Only)
func integerTrim(integer:Int, trimLength:Int) -> Int {
var strFromInteger = String(integer)
var trimmedString = strFromInteger.prefix(trimLength)
var intFromString = Int(trimmedString) ?? 0
return intFromString
}

//Declare Input
var inputInt = 12345678910

//Call Function
var result = integerTrim(integer: inputInt, trimLength: 4)

//Print Results
print(inputInt)
print(result)

这不是...!

//Function to trim integer prefix or suffix
func integerTrim(integer:Int, type:String, trimLength:Int) -> Int {
var typeID = type
//var turnStringToInteger: Int
if typeID == "P" {
var turnIntegerToString = String(integer)
var trimmedString = turnIntegerToString.prefix(trimLength)
var turnStringToIngeger = Int(trimmedString) ?? 0
}
else if typeID == "S" {
var turnIntegerToString = String(integer)
var trimmedString = turnIntegerToString.suffix(trimLength)
var turnStringToIngeger = Int(trimmedString) ?? 0
}
return turnStringToInteger
}

//Declare Input
var inputInt = 53737363856453

//Call Function
var result = integerTrim(integer: inputInt, type: "P", trimLength: 4)

//Print Results
print(inputInt)
print(result)

由于我是自学成才,我很感激我也可能没有使用最佳实践。我真的很想学会正确地做到这一点,所以如果我以错误的方式开始所有这一切,我同样很乐意听到其他方法。例如,我确实考虑过将整数转换为数组,然后从该数组中的位置创建修剪后的整数。这样会更优雅吗?

最佳答案

如果要访问赋值作用域之外的变量,需要在外部作用域声明。

如果您在没有为其分配初始值的情况下执行此操作,则会出现错误:在初始化之前使用变量 'turnStringToInteger'。发生这种情况是因为 Swift 看到了一个路径,其中 turnStringToInteger 永远不会被分配一个值(想象一下如果为 type 传入“X”会发生什么)。

所以您真正的问题是使用 String 作为 type 的类型。最好使用能准确表达您想要的内容的 enum:

enum TrimType {
case prefix, suffix
}

func integerTrim(integer: Int, type: TrimType, trimLength: Int) -> Int {

let typeID = type
var turnStringToInteger: Int

switch typeID {
case .prefix:
let turnIntegerToString = String(integer)
let trimmedString = turnIntegerToString.prefix(trimLength)
turnStringToInteger = Int(trimmedString) ?? 0
case .suffix:
let turnIntegerToString = String(integer)
let trimmedString = turnIntegerToString.suffix(trimLength)
turnStringToInteger = Int(trimmedString) ?? 0
}

return turnStringToInteger
}

现在 type 只有 2 种可能性,switch 处理这两种可能性。

你可以这样调用它:

let result = integerTrim(integer: inputInt, type: .prefix, trimLength: 4)

...经过一点重构:

func integerTrim(integer: Int, type: TrimType, trimLength: Int) -> Int {

let turnIntegerToString = String(integer)
let trimmedString: Substring

switch type {
case .prefix:
trimmedString = turnIntegerToString.prefix(trimLength)
case .suffix:
trimmedString = turnIntegerToString.suffix(trimLength)
}

return Int(trimmedString) ?? 0

}

关于swift - 带有嵌套 if 循环的 swift 函数中 Unresolved 标识符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57327414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com