模糊地使用追加?

时间:2015-01-06 01:16:31

标签: ios swift

我正在尝试使用Swift制作一个基本的计算器但我无法弄清楚如何在按下时将数字添加到顶部。我每次按下按钮时都试图将数字附加到字符串,但是我收到错误“不明确使用追加”。导致此错误的代码有什么问题?如何修复它以使其起作用?

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var oneButton: UIButton!
    @IBOutlet weak var textField: UILabel!




    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func onePressed(sender: AnyObject) {

        textField.text?.append("1")

    }

}

4 个答案:

答案 0 :(得分:11)

请注意,在Swift中处理集合时的约定是:append在集合的末尾添加单个元素,extend添加另一个集合的内容。对于字符串,这意味着append添加单个字符,而extend添加其他字符串(或其他集合或字符序列,如数组)。

在追加的情况下,String有两个附加功能。一个需要Character,一个需要UnicodeScalar。两者都被称为追加。

如果您在字符串变量上获得完成弹出窗口,则可以看到它们:

image of completion options for String.append

你需要告诉Swift你想要哪一个:

textField.text?.append(“1” as Character)

textField.text?.append(“1” as UnicodeScalar)

""之间只有一个字符时,这种歧义是由文字转换的多次重载引起的。当您撰写"a"时,它可能会导致生成多种类型之一 - StringCharacterUnicodeScalar或自定义类型{{1}实现(比如说代表URL的类型)。 StringLiteralConvertible被排除在外(String不接受一个),但仍然留下另外两个。

另一方面,如果您已经有append变量,则无需消除歧义:

Character

Swift从上下文中决定(即潜在匹配函数调用的参数类型可能是什么)。其他解决方案建议使用let c: Character = "a" textField.text?.append(c) // no ambiguity 连接运算符或+.extend()也可以。这些不是模棱两可的,因为它们没有超载 - 它们只采用+=(或String的情况下,另一个字符集合,这是extend是),以及因此,Swift可以在没有任何帮助的情况下从文字转换为String

答案 1 :(得分:3)

您可以使用+来连接字符串。

使用类似:

@IBAction func onePressed(sender: AnyObject)
{
    if let txt = textField?.text
    {
        textField?.text = txt + "1"
    }
}

答案 2 :(得分:2)

问题是,当您的意思是append时,您使用的是extend。写下来,一切都会好的:

 textField.text?.extend("1")

答案 3 :(得分:0)

将字符串附加到字符串

虽然接受的答案在技术上是正确的并且是一个非常好的答案,但似乎(我的假设)所有OP试图做的是将字符串附加到字符串而不是将UnicodeScalar或Character字面附加到串。

如果这是您的意图并且我假设大多数用户想要做类似的事情,请使用.appendContentsOf(other: String)

textfield.text?.appendContentsOf("1")

此外,已弃用.extend()已不再可用。