Swift, используйте имя строки для ссылки на переменную

Запланируйте использовать строковое значение для ссылки на переменную, которую я хочу обновить. Объединение строки из нескольких различных источников, выбранных пользователем. Для многих возможностей использовать if / case заявления. заранее спасибо

var d1000: Int = 0
// ...
var d1289: Int = 0
// ...
var d1999: Int = 0

var deviceIDtype: Character = "d" // button press assigns some value, d used for example
var deviceIDsection: String = "12" // button press assigns some value, 12 used for example
var deviceID: String = "89" // button press assigns some value, 89 used for example

var ref:String = ""

func devName(dIDt:Character, dIDs: String, dID: String)  -> String {      
    var combine: String = String(dIDt) + (dIDs) + (dID)
    return (combine) 
}

ref = devName(deviceIDtype, dIDs: deviceIDsection, dID: deviceID) // ref equals d1289 in this example


// d1289 = 1234 // trying to set this using the ref variable value, failed attempts below
/(ref) = 1234 // set d1289 variable to equal "1234"
"/(ref)" = 1234 // set d1289 variable to equal "1234"
get(ref) = 1234 // set d1289 variable to equal "1234"
get.ref = 1234 // set d1289 variable to equal "1234"
 Valentin Shergin06 июн. 2016 г., 07:01
Вы, вероятно, можете использоватьMirror (developer.apple.com/library/watchos/documentation/Swift/...).

Ответы на вопрос(2)

Решение Вопроса

[String : Int]?

Это позволит вам достичь желаемого - хранить значения для разных ключей.

Например, вместо использования

var d1000 = 0
var d1289 = 0
var d1999 = 0

Вы могли бы использовать

var dictionary: [String : Int] = [
  "d1000" : 0,
  "d1289" : 0,
  "d1999" : 0
]

Чтобы сохранить значение в словаре, просто используйте

dictionary[key] = value
//for example, setting "d1289" to 1234
dictionary["d1289"] = 1234

и чтобы получить значение из словаря, используйте

let value = dictionary[key]
//for example, getting the value of "d1289"
let value = dictionary["d1289"]

Итак, вы можете использовать что-то вроде этого

//initialize your dictionary
var myDictionary: [String : Int] = [:]

//your key initialization data
var deviceIDtype: Character = "d"
var deviceIDsection: String = "12"
var deviceID: String = "89"
var ref: String = ""

//your code
func devName(/*...*/){/*...*/}
ref = devName(/*...*/)

//set the key ref (fetched from devName) to 1234
myDictionary[ref] = 1234

Как примечание, вы можете действительно очистить часть своего кода

func devName(type: Character, section: String, id: String) -> String{      
    return String(type) + section + id
}

//...

let key = devName(deviceIDtype, section: deviceIDsection, id: deviceID)
let value = 1234
myDictionary[key] = value

Это возможно!!!

let index = 1000
if let d1000 = self.value(forKey: "d\(index)") as? Int {
    // enjoy
}
 Confused11 авг. 2017 г., 01:41
Как результат может быть Int ?, у него есть «d» (строка), в значении ключа, так что не может быть целым числом, верно?
 Irshad Mohamed12 авг. 2017 г., 16:30
D1000 является ключом. я, е. имя переменной. Int - это значение, которое оно содержит. это зависит от того, как вы объявляете d1000 в своем классе (самостоятельно). проверьте этот пример.class Temp { var myVar = "hello"} в этом случае, если я возьмуvalue(forKey:)я получу строку.if let myVarRep = self.value(forKey: "myVar") as? String {}

Ваш ответ на вопрос