【问题标题】:Swift String/Character Optional Printing without "Optional"没有“可选”的 Swift 字符串/字符可选打印
【发布时间】:2017-10-27 17:23:36
【问题描述】:

Swift 新手,尝试使用字符串插值打印Optional。我希望它在Optional 为空时打印nil,但也希望它在实际包含字符串/字符时正确打印它。

所以我想要完成的应该可以在这里使用:

print("The result is: \(funcToReturnOptional)")

结果要么是有价值的结果,要么是正在打印的nil

我该怎么做?我不想强制展开,因为我希望对实际函数的一些测试返回 nil。

记录一下,函数是:

func firstNonRepeatingChar(input:String)->Character?{
    //set a default return object
    var result: Character? = nil
    //convert input for easy and clean navigation
    let converted = Array(input)
    //set start of enumeration
    var index: Int = 0
    //set variable to compare
    var c:Character
    //should only trigger if non-empty input
    while index<converted.count-1{
        c=converted[index]
        //check for non-repeated value
        if !converted[index+1..<converted.count].contains(c){
            result=c
            return result
        }
        index+=1
    }
    return result
}

我正在尝试打印如下:

print(firstString+" should return \(firstNonRepeatingCharacter(input: firstString)??"nil")")

【问题讨论】:

  • 能否分享funcToReturnOptional相关代码
  • 使用stackoverflow.com/a/46933890/1187415的扩展方法你可以做到firstNonRepeatingChar(input: firstString).descriptionOrNil
  • 您的代码还有问题吗?如果是这样,错误是什么?
  • 当我尝试使用 ??或 .descriptionOrNil。前者说我不能在非可选类型字符上使用可选链接。后者说 Character 没有成员“descriptionOrNil” 编辑:哦,这是一个自定义扩展。
  • @user3478947 你的 swift 版本是什么?

标签: swift optional


【解决方案1】:

这里是函数:

func firstNonRepeatingChar(input:String)->Character?{
        //set a default return object
        var result: Character? = nil
        //convert input for easy and clean navigation
       // let converted = Array(input) swift2
        let converted = [Character](input.characters) //swift3
        //set start of enumeration
        var index: Int = 0
        //set variable to compare
        var c:Character
        //should only trigger if non-empty input
        while index<converted.count-1{
            c=converted[index]
            //check for non-repeated value
            if !converted[index+1..<converted.count].contains(c){
                result=c
                return result
            }
            index+=1
        }
        return result
    }

然后打电话:

print("The result is: \(firstNonRepeatingChar(input: "I miss you")?.description ?? "nil")")

输出控制台:

结果是:我

 let fistString = "I miss you"  
 print("here is FistString: \(fistString) and The result is: \(firstNonRepeatingChar(input: fistString)?.description ?? "nil")")

【讨论】:

  • 成功了,谢谢。我已经习惯了 Java,可选项只是很奇怪。
  • @user3478947 没有人的选项有很大的优势.. 继续学习 swift 希望你能得到想法
【解决方案2】:

斯威夫特 4

解包字符可选或默认为字符串nil

let result = firstNonRepeatingCharacter(input: firstString)?.description ?? "nil"

print("\(firstString) should return \(result)")

【讨论】:

  • 不能对 Character 类型的非可选值使用可选链接。这很奇怪,因为我的函数确实返回了一个字符?
  • func firstNonRepeatingChar(input:String)-&gt;Character?{ var result: Character? = nil let converted = Array(input) var index: Int = 0 var c:Character while index&lt;converted.count-1{ c=converted[index] if !converted[index+1..&lt;converted.count].contains(c){ result=c return result } index+=1 } return result }
  • print(firstString+"Should return \(firstNonRepeatingChar(input:firstString)")
  • @user3478947 我很困惑这个答案是如何被同一个答案否决的。
  • 我什至不知道。老实说,当其他人投反对票时,我有点忘记了它。我可以肯定地说我选择了另一个,因为他还为 Swift 3 更正了我的数组转换,所以从技术上讲它更有帮助
猜你喜欢
  • 1970-01-01
  • 2015-10-28
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
相关资源
最近更新 更多