【问题标题】:Swift: 'Class.type' does not have member named 'variable'斯威夫特:“Class.type”没有名为“变量”的成员
【发布时间】:2016-02-07 20:40:53
【问题描述】:

我最近开始了 Swift 编程语言课程,在我的第一个程序上需要一些帮助。 我正在使用 Playground 在 Xcode v6.3.2 中编写一个字谜程序。对于我的逻辑,我首先按字母顺序对单词进行排序,然后进行比较。将 word1 和 word2 声明为数组并指示“Anagram.type”没有名为“word1”的成员时会发生错误。 我相信我的逻辑是正确的。我正在努力理解为什么会发生这个错误,以及如何解决它。我在网上环顾四周,但很难将我发现的内容应用于我自己的代码。 这是我第一次使用堆栈溢出。欢迎所有建设性的反馈。

   import UIKit

    class Anagram{
        let  word1 :String
        let  word2 :String

        init(word1: String, word2: String){
            self.word1 = word1
            self.word2 = word2
        }
        var characters1 = Array(word1)
        var characters2 = Array(word2)

        characters1 = characters1.sort()
        characters2 = characters2.sort()

        var pos = 0
        var match = true
        while pos < characters2.length && match {
            if characters1[pos] == characters2[pos]:
                pos = pos + 1
            else:
                match = false
        }
        return match

    }
    let theAnagram = Anagram(word1: "abcd", word2: "dcba")

【问题讨论】:

  • 你在 swift 2 中吗?无论如何,我相信你需要一个函数来从你的类中获取你需要的东西。

标签: swift


【解决方案1】:

首先-正如 smozgur 在 cmets 中所说,您需要使用一个函数来检查它是否是一个字谜。其次,据我所知,Array(String) 在 Swift 2.0 中不再有效。为了解决这个问题,我参考了Convert a String to an array of characters swift 2.0。因此,总而言之,我将您的逻辑放入一个函数中,并修复了您的 characters(1,2) 数组的创建。这就是我让它工作的方式:

class Anagram{
let  word1 : String
let  word2 : String

init(word1: String, word2: String){
    self.word1 = word1
    self.word2 = word2
}

func checkAnagram () -> Bool {
    var characters1 = Array(word1.characters).sort()
    var characters2 = Array(word2.characters).sort()
    var pos = 0
    var match:Bool = true
    while pos < characters2.count && match {

        if characters1[pos] == characters2[pos] {

            pos++
        }

        else {
            match = false
        }
    }
    return match
}
}

let trueAnagram = Anagram(word1: "abcd", word2: "dcba")

trueAnagram.checkAnagram()
//returns true

let falseAnagram = Anagram(word1: "false", word2: "falze")

falseAnagram.checkAnagram()
//returns false.

旁注:不要使用pos = pos + 1,而是使用pos++

如果这对您有用,请查看我的答案。如果没有,请发表评论,我会再次尝试帮助您。

【讨论】:

【解决方案2】:

嗯..

如下调整您的代码。 下面的代码没有错误...

let  word1 :String
let  word2 :String

class Anagram{


        var characters1 = Array(word1)
        var characters2 = Array(word2)
.
.
.
.

我猜在你的代码中 word1,word2 还不存在,因为相同的类属性没有顺序.. 方法的属性不太可能

【讨论】:

  • 这不起作用。首先,arrayLiteral 给出了一个包含一个值的数组,即整个字符串。用户想要字符串中每个字符的数组。此外,它仍然需要一个函数才能工作。
  • 编辑我的答案......但我的意见是一样的......我的想法的局限性
  • 我写了一个答案。我到底为什么要让你和我说同样的话?
猜你喜欢
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 2017-07-22
  • 2017-03-24
相关资源
最近更新 更多