Как мне вернуться к началу функции в swift? - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть эта функция, которая выбирает случайное значение из списка:

func pickAttraction(attractionType: Array<Attraction>) -> Attraction {
  var randAttr = attractionType.randomElement()
  if favoritesNames.contains(randAttr!.attractionName) {
    return pickAttraction(attractionType: attractionType)
  } else {
    return randAttr!
  }
}

Если случайное значение находится в массиве FavoritesName, я хочу, чтобы оно go вернулось в начало функции и выберите новое значение.

Как я могу сделать это более эффективным?

Кроме того, возможно ли, чтобы программа обработала sh при принудительном развертывании randAttr (в строке 3), если attractionType всегда имеет хотя бы 8 значений?

Ответы [ 2 ]

4 голосов
/ 27 апреля 2020

Вопрос не стоит задавать! Это никогда не приведет тебя туда.

func pickAttraction(from attractions: [Attraction]) -> Attraction? {
  attractions.filter { !favoritesNames.contains($0.name) }
    .randomElement()
}
1 голос
/ 27 апреля 2020

Вот образец на детской площадке

import UIKit
class RandomAttraction:Hashable{
    static func == (lhs: RandomAttraction, rhs: RandomAttraction) -> Bool {
        return lhs.attractionName == rhs.attractionName
    }
    func hash(into hasher: inout Hasher) {
        hasher.combine(attractionName)
    }

    init(attractionName:String) {
        self.attractionName = attractionName
    }
    var attractionName:String

}

var favoritesNames = [RandomAttraction.init(attractionName: "a"),RandomAttraction.init(attractionName: "b")]

var otherNames = [RandomAttraction.init(attractionName: "c"),RandomAttraction.init(attractionName: "d")]



func pickAttraction(attractionType: Array<RandomAttraction>) -> RandomAttraction? {
    //Filters the content of the favoritesNames from attractionType
   let filteredArray = Array(Set(attractionType).subtracting(favoritesNames))
    //If count is zero return nil
    if filteredArray.count == 0{
        return nil
    }
    let randAttr = filteredArray.randomElement()
    return randAttr
}

//MARK: Usage
if let pickedAttraction = pickAttraction(attractionType: otherNames){
    print(pickedAttraction.attractionName)
}else{
    print("No attractions")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...