RandMyMod is an IOS Native Framework helps you generate one or a set of variable base on your own model.
No matter your model is Class / Struct.
- Cocoapods
pod 'RandMyMod'
import RandMyModCreate a Random Model
letinstance=MyStruct()RandMyMod<MyStruct>().randMe(baseOn: instance){(newInstance)inguardlet newinstance = newInstance else{print("error"); return}}
Create a set of Random Model
letinstance=MyStruct()RandMyMod<MyStruct>().randUs(baseOn: instance){(newInstanceArr)infornewInstancein newInstanceArr {guardlet newinstance = newInstance else{print("error"); return}}}
RandMyModDelegate
publicprotocolRandMyModDelegate{func countForArray(for key:String)->Intfunc shouldIgnore(for key:String, in Container:String)->Boolfunc catchError(with errorStr:String)func specificRandType(for key:String, in Container:String, with seed:RandType)->(()->Any)?}
Swift fake data generator
vadymmarkov/Fakery : https://github.com/vadymmarkov/Fakery
if the variable in class / stuct is Declared with 『 let 』 , rand mod will not change this variable's value.
structMyStruct{letnochange:Int=0}letmystruct=MyStruct()RandMyMod<MyStruct>().randMe(baseOn: mystruct){(newstruct)in newstruct.nochange // 0 }
if the variable in class / stuct is Declared with 『 Optional 』 and have no initial Value , rand mod will ignore this variable's value and keep it nil. (Mirror may resolve this issue, may fix in the future)
structMyStruct{varopt:Int?=0varopt2:Int?}letmystruct=MyStruct()RandMyMod<MyStruct>().randMe(baseOn: mystruct){(newstruct)in mystruct.opt // 4242 mystruct.opt2 // nil }
classMan:Codable{varname:String=""varaddress:String=""varwebsite:[String]=[]}letman=Man()RandMyMod<Man>().randMe(baseOn: man){(newMan)inguardlet new = newMan else{return}print(new.address) //mnxvpkalug
print(new.name) //iivjohpggb
print(new.website) //["pbmsualvei", "vlqhlwpajf", "npgtxdmfyt"]
}structMan:Codable{varname:String=""varage:Int=40varwebsite:[String]=[]}extensionMan:RandMyModDelegate{func countForArray(for key:String)->Int{switch key {case"website":return3default:return0}}func specificRandType(for key:String, in Container:String, with seed:RandType)->(()->Any)?{switch key {case"name":return{return seed.name.name()}case"age":return{return seed.number.randomInt(min:1, max:60)}case"website":return{return seed.internet.url()}default:returnnil}}}letman=Man()RandMyMod<Man>().randMe(baseOn: man){(newMan)inguardlet new = newMan else{print("no"); return}print(new.age) //32
print(new.name) //Lavada Krajcik
print(new.website) //["https://littleohara.name/johathangleason6379", "https://kautzerwunsch.biz/karleejones8880", "https://purdy.net/olivercorkery"]
}structMan:Codable{varname:String=""varage:Int=40varwebsite:[String]=[]varchild:Child=Child()}structChild:Codable{varname:String="Baby" //Baby has no name yet.
varage:Int=2vartoy:Toys=Toys()}classToys:Codable{varweight:Double=0.0}extensionMan:RandMyModDelegate{func shouldIgnore(for key:String, in Container:String)->Bool{switch(key, Container){case("name","child"):returntruedefault:returnfalse}}func specificRandType(for key:String, in Container:String, with seed:RandType)->(()->Any)?{switch(key, Container){case("age","child"):return{return seed.number.randomInt(min:1, max:6)}case("weight",_):return{return seed.number.randomFloat()}default:returnnil}}}letman=Man()RandMyMod<Man>().randMe(baseOn: man){(newMan)inguardlet child = newMan?.child else{print("no"); return}print(child.name) //Baby
print(child.age) //3
print(child.toy.weight) //392.807067871094
}Feel free to fork / pull request / open an issue.
