我正在生成一个QRCode,其中包含以注册形式输入的用户名,电子邮件和电话号码。在RegistrationVC中,我使用了userdefaults来保存所有这3个字段。现在在我的QRGenerate VC中,在用户默认的帮助下,我想生成QR码,但是抛出错误
二进制运算符'+'不能应用于'String'和'String!'类型的操作数。
我将所有三个键传递给一个字符串(即qrgeneratestring)并生成QRCodes。
phoneKeyValue = UserDefaults.standard.string(forKey: "phoneKey")
nameKeyValue = UserDefaults.standard.string(forKey: "nameKey")
emailidKeyValue = UserDefaults.standard.string(forKey: "emailIDKey")
var qrgeneratestring = nameKeyValue + emailidKeyValue + phoneKeyValue
if qrgeneratestring.isEmpty == false{
let ciImageFromQRCode = generateQRCodeFromString(strQR: qrgeneratestring)
let scaleX = (imgViewQRCode.frame.size.width / ciImageFromQRCode.extent.size.width)
let scaleY = (imgViewQRCode.frame.size.height / ciImageFromQRCode.extent.size.height)
let imgTransformed = ciImageFromQRCode.applying(CGAffineTransform(scaleX: scaleX, y: scaleY))
imgViewQRCode.image = UIImage(ciImage: imgTransformed)
}
答案 0 :(得分:0)
string(forKey
返回一个可选项,您需要打开这三个值,并且必须将变量声明为非可选
var phoneKeyValue = ""
var nameKeyValue = ""
var emailidKeyValue = ""
let defaults = UserDefaults.standard
phoneKeyValue = defaults.string(forKey: "phoneKey") ?? ""
nameKeyValue = defaults.string(forKey: "nameKey") ?? ""
emailidKeyValue = defaults.string(forKey: "emailIDKey") ?? ""
答案 1 :(得分:0)
UserDefaults方法string(forKey:...)
返回一个可选项 - 这个值可以是String类型,也可以是nil。
您需要使用感叹号!
或使用coalesence运算符??
来展开可选项。这取决于您是否知道值不能为零(因此使用感叹号),或者当optional是nil值时提供默认值。
在这种情况下,我会使用:
phoneKeyValue = UserDefaults.standard.string(forKey: "phoneKey") ?? ""
nameKeyValue = UserDefaults.standard.string(forKey: "nameKey") ?? ""
emailidKeyValue = UserDefaults.standard.string(forKey: "emailIDKey") ?? ""
var qrgeneratestring = nameKeyValue + emailidKeyValue + phoneKeyValue