【问题标题】:Having trouble with syntax in swift looping through an array在快速遍历数组时遇到语法问题
【发布时间】:2016-04-18 19:39:19
【问题描述】:

我正在尝试弄清楚如何遍历此用户名数组,但不确定语法。我在 xcode 中使用 swift

我目前有:

 // Read text file
        if let filepath = NSBundle.mainBundle().pathForResource("barbers", ofType: "txt")
        {
            do
            {
                //let contents = try NSString(contentsOfFile: filepath, usedEncoding: nil) as String;
                //print(contents);
                let text = try NSString(contentsOfFile: filepath, usedEncoding: nil) as String;

                // Create character array & parse
                let usernames = text.characters
                    .split { $0 == "\n" }
                    .map { String($0) }
                    .map { String($0.characters.split(" ")[0]) }

                // Print Users
                print(usernames);

                // Test



            }
            catch
            {
                // Catch error?
            }
        }
        else
        {
            // Print error to console log
            print("Error: Could not find text file - something went wrong");
        }

我的问题是:如何循环访问我的用户名数组?

我只是不知道 swift 语法

我正在寻找类似的东西

for(int i =0; i < usernames.size(); i ++ )
{
  if(usernames[i] == USER)
  {
    b = true;
    break;
  }
  b = false;
}

更新:

好的,我已经想出了如何循环,但现在我遇到了麻烦

我做了一个全局变量

var abc = "";

然后我做了

let abc = usernames;

现在当我尝试这样做时

// Test
for i in abc.characters
{
    print("abc array contents: " + i);
    if(i == theUser)
    {
        print("Barber");
        barb = true;
        break;
    }
    print("USER " + theUser);
    barb = false;
    print("\n");
}

我得到了错误

二元运算符“+”不能应用于“字符串”和“字符”类型的操作数

二元运算符“==”不能应用于“字符”和“字符串”类型的操作数

【问题讨论】:

  • kye 现在我正在使用它,但由于某种原因它无法正常工作......但是当我打印出 i 的内容时,它会说出它应该说的内容,但它甚至没有执行 my for 的主体出于某种原因循环...这是我所拥有的 // 在用户名中测试 i { print(i); if(i == theUser) { print("理发师");倒钩=真;休息; } 倒钩 = 假; }
  • 查看提供的答案,它们都应该有效!您还可以用该代码更新您的问题吗(在 cmets 中很难阅读)
  • 如果您只想检查用户名数组是否包含给定字符串:if usernames.contains(USER) { ... }
  • 查看我更新的帖子。我现在在尝试遍历数组时遇到了另一个问题

标签: arrays xcode swift for-loop


【解决方案1】:

以上所有这些都有效,但我最喜欢的 Swifty for 循环是

  for index in 0..< usernames.count { 
     //your code here
     //to get an object at a specific index you call usernames[index]
  }

针对您更新的问题,我认为您需要将角色转换为字符串。像

  let myCharacterAsAString = String(i)
  print("abc array contents: " + myCharacterAsAString);
  if(myCharacterAsAString == theUser)
  {
    print("Barber");
    barb = true;
    break;
  }
  print("USER " + theUser);
  barb = false;
  print("\n");
}

【讨论】:

  • 如何将用户名数组中的字符串与另一个字符串或文本字段进行比较?
  • // 在用户名中测试 i { print(i); if(i == theUser) { print("理发师");倒钩=真;休息; } 倒钩 = 假; } 这不起作用
  • 如果(usernames[index] == inputString) { //do this } else { // do something else }是这样的
  • 查看我更新的帖子。我现在在尝试遍历数组时遇到了另一个问题
  • 您的代码已编译,但由于某种原因它甚至没有进入我的循环体
【解决方案2】:
for username in usernames
{
    if(username == USER)
    {
        b = true;
        break;
    }
    b = false;
}

或者如果您需要访问当前项目的索引:

for (index, username) in usernames.enumerate()
{
    // same body as above
}

【讨论】:

  • 如何将用户名与另一个字符串进行比较?
  • 如何将用户名与文本字段进行比较?出于某种原因,这不起作用 // 在用户名中测试 i { print(i); if(i == theUser) { print("理发师");倒钩=真;休息; } 倒钩 = 假; }
  • @Yusha 与另一个字符串的比较只需使用相等运算符 (==) 即可实现。更新了答案。要从 textField 中获取文本,只需访问其“文本”属性:if(username == someTextField.text) {//... }
  • 查看我更新的帖子。我现在在尝试遍历数组时遇到了另一个问题
【解决方案3】:

我相信最新版本的 Swift 已经取消了 C 风格的 for 循环。 这可能不是很有帮助,但在 Swift 中迭代的方法可能是使用 for-in 循环

for username in usernames
{
    if username == USER
    {
        b = true
        break
    }
    b = false
}

【讨论】:

  • 查看我更新的帖子。我现在在尝试遍历数组时遇到了另一个问题
  • @Yusha 在swift中你不能用+将一个字符串附加到另一个字符串。在这种情况下,您可以执行print("abc array contents: \(i)") 至于== 运算符上的错误,您可能应该比较相同类型的对象,例如 char == char。如果您只期望 theUser 中的一个字符,您可能可以为您的条件执行 if i == theUser.characterAtIndex(0)
猜你喜欢
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多