字符串扩展,添加一个方法“add”并将一个 Int 作为没有标签的参数并返回一个可选的 Int

Posted

技术标签:

【中文标题】字符串扩展,添加一个方法“add”并将一个 Int 作为没有标签的参数并返回一个可选的 Int【英文标题】:String extension that adds a method "add" and takes an Int as a parameter with no label and returns an optional Int 【发布时间】:2019-10-11 23:24:34 【问题描述】:

我正在尝试进行字符串扩展,该扩展添加了一个方法“add”并将一个 Int 作为没有标签的参数并返回一个可选的 Int。如果字符串可以转换为整数,则返回一个整数,字符串的整数值加上传入的值。如果字符串不能转为整数,则返回 nil。

我写了下面的代码,但是我无法让它工作。

我收到每个值的以下警告消息:

从未使用过不可变值“value1”;考虑用“_”替换或删除它


import UIKit

class MyViewController: UIViewController 
    override func loadView()  
        let value1: Int? = "5".add(3) // value1 will equal 8
        let value2: Int? = "-2".add(1) // value2 will equal -1
        let value3: Int? = "words".add(4) // value3 will be nil
    


extension String    
    func add(_: Int) -> Int? 
        guard let someString = Int(self) else 
            return nil
        
        return someString + someString
    


解决方案应该是这样的:

let value1: Int? = "5".add(3) // value1 will equal 8
let value2: Int? = "-2".add(1) // value2 will equal -1
let value3: Int? = "words".add(4) // value3 will be nil

【问题讨论】:

“我无法让它工作”是什么意思? 这是我为每个值得到的以下错误:从未使用不可变值'value1';考虑用“_”替换或删除它。 Swift 是说,在定义value1 之后,你永远不会使用它,那何必呢。添加一些打印(例如print(value1)),然后你会看到你有另一个错误。 【参考方案1】:

您的扩展的问题是您忘记将方法参数命名为 func add(_ value: Int) -> Int? 并将其添加到 someString 值。顺便说一句,将安整数命名为 someString 具有误导性,而 Swift 是一种类型推断语言。大多数情况下不需要显式设置结果类型:

extension String 
    func add(_ value: Int) -> Int? 
        guard let integer = Int(self) else 
            return nil
        
        return integer + value
    


let value1 = "5".add(3) // value1 will equal 8
let value2 = "-2".add(1) // value2 will equal -1
let value3 = "words".add(4) // value3 will be nil

要使有关不使用值的警告静音,您可以简单地打印它们。

【讨论】:

以上是关于字符串扩展,添加一个方法“add”并将一个 Int 作为没有标签的参数并返回一个可选的 Int的主要内容,如果未能解决你的问题,请参考以下文章

[转]C#的扩展方法解说

将int作为sql参数

python内置方法使用

python内置方法使用

纯并行添加的Java ArrayList.add() 方法线程安全吗? [复制]

在 Swift 中向 Int 添加千位分隔符