【问题标题】:Adding a newly created object into an array in swift快速将新创建的对象添加到数组中
【发布时间】:2021-04-18 04:33:39
【问题描述】:

我决定在 java 中启动一个项目,以大致了解程序的功能,然后我开始用 swift(一种我完全不熟悉的语言)对其进行编程,同时尝试转换我运行的代码进入一个问题,甚至无法理解我是如何出错的。这是代码的上下文

public class Item {
    private String name;
    private double price;

    public Item(String name,double price) {
        this.name = name;
        this.price = price;
    }
}
public class Account{
    public ArrayList<Item> ItemsList = new ArrayList<Item>();
   
    public Account() {
        this.ItemsList = newArrayList<Item>();
    }

    public void addItem(String name,double price) {
        ItemsList.add(new Item(name,price)
    }

在 Swift 中我已经做到了这一点

class Item {
    
    var name:String
    var price:Double
    
    init(name:String,price:Double) {
        self.name = name
        self.price = price
    }
}

class Account {

    var ItemsList:Array<Item>

    init() {
        self.ItemsList = []
    }

    func addItem(name: String,price: Double){
        ItemsList.append(Item(name: String,price: Double))
    }

}

最后一行

ItemsList.append(Item(name: String,price: Double))

运行时返回错误

【问题讨论】:

    标签: java arrays swift oop object


    【解决方案1】:

    问题来了

    func addItem(name: String, price: Double){
         ItemsList.append(Item(name: String,price: Double)) //<-- Problem
    }
    

    看一下JAVA代码:

    public void addItem(String name,double price) {
           ItemsList.add(new Item(name,price) //<-- Here
    }
    

    您传递的名称和价格作为值参数,而不是数据类型。

    为什么会出现错误?这是因为当您调用任何函数时,您需要传递值而不是数据类型

    正确的语法是:

    func addItem(name: String, price: Double){
        ItemsList.append(Item(name: name, price: price)) //<-- Solution
    }
    

    如果想要JAVA类型的构造器语法风格,可以这样使用下划线,

    class Item {
        var name: String
        var price: Double
        init(_ name:String, _ price:Double) {
            self.name = name
            self.price = price
        }
    }
    
    class Account {
        var itemsList: [Item] = []
        
        init() {
        }
        
        func addItem(name: String, price: Double){
            itemsList.append(Item(name, price))
        }
        
    }
    

    注意:变量名必须以小写开头。更多:https://google.github.io/swift/

    【讨论】:

    • 非常感谢,到目前为止,我发现 swift 的语法相当混乱。
    • @Raja Kishan:次要问题,但变量名称必须以小写开头是不正确的。这可以说是一个近乎普遍的惯例,但这不是语言要求或硬性规定。
    • 规则是出于某种目的而制定的,在某些特殊情况下,您可以避免遵守这些规则。
    • 您的“问题就在这里”代码实际上是正确的。我想这是一个复制/粘贴错误。关于变量名我都同意,我认为应该使用这个词而不是必须使用这个词更好,但它是一个强大的应该
    • 哦,是的,@JoakimDanielson。谢谢指正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    • 2016-01-14
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多