2016-06-05 3 views
0

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

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" 
+0

Вы, вероятно, можно использовать 'Mirror' (https://developer.apple.com/library/watchos/documentation/Swift/Reference/Swift_Mirror_Structure/index.html#//apple_ref/swift/structctr/Mirror/ s: FVs6MirrorcFT10reflectingP__S_). –

ответ

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 
1

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

let index = 1000 
if let d1000 = self.value(forKey: "d\(index)") as? Int { 
    // enjoy 
} 
+0

Как результат может быть Int ?, он получил «d» (string) в значении ключа, поэтому не может быть целым числом, правильно? – Confused

+1

d1000 - это ключ. я, е. имя переменной. Int - это значение, которое оно содержит. это зависит от того, как вы объявляете d1000 в своем классе (self). ознакомьтесь с этим примером. 'class Temp {var myVar =" hello "}' в этом случае, если я возьму 'значение (forKey:)', я получу String. 'if let myVarRep = self.value (forKey:" myVar ") как? Строка {} ' –