二元运算符“+”不能应用于 'String' 类型的操作数和“字符串感叹号”
Binary operator '+' cannot be applied to operands of type 'String' and 'String exclamationmark
我正在生成一个 QRCode,其中包含在注册表中输入的姓名、电子邮件和 phone 用户数量。在 RegistrationVC 中,我使用 userdefaults 来保存所有这 3 个字段。现在在我的 QRGenerate VC 中,在用户默认值的帮助下我想生成 QR 码,但抛出错误
Binary operator '+' cannot be applied to operands of type 'String' and 'String!".
我将所有三个键传递给一个字符串 (i.e.qrgeneratestring) 并生成二维码。
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)
}
string(forKey
returns 一个可选的,你需要解包三个值,你必须声明变量为非可选的
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") ?? ""
UserDefaults 方法 string(forKey:...)
returns 一个可选的 - 这是一个可以是 String 类型或 nil 类型的值。
您需要使用感叹号 !
或使用合并运算符 ??
来解包可选。这取决于您是否知道该值不能为 nil(因此您使用感叹号)或者当可选值为 nil 值时您提供默认值。
在这种情况下我会使用:
phoneKeyValue = UserDefaults.standard.string(forKey: "phoneKey") ?? ""
nameKeyValue = UserDefaults.standard.string(forKey: "nameKey") ?? ""
emailidKeyValue = UserDefaults.standard.string(forKey: "emailIDKey") ?? ""
var qrgeneratestring = nameKeyValue + emailidKeyValue + phoneKeyValue
我正在生成一个 QRCode,其中包含在注册表中输入的姓名、电子邮件和 phone 用户数量。在 RegistrationVC 中,我使用 userdefaults 来保存所有这 3 个字段。现在在我的 QRGenerate VC 中,在用户默认值的帮助下我想生成 QR 码,但抛出错误
Binary operator '+' cannot be applied to operands of type 'String' and 'String!".
我将所有三个键传递给一个字符串 (i.e.qrgeneratestring) 并生成二维码。
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)
}
string(forKey
returns 一个可选的,你需要解包三个值,你必须声明变量为非可选的
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") ?? ""
UserDefaults 方法 string(forKey:...)
returns 一个可选的 - 这是一个可以是 String 类型或 nil 类型的值。
您需要使用感叹号 !
或使用合并运算符 ??
来解包可选。这取决于您是否知道该值不能为 nil(因此您使用感叹号)或者当可选值为 nil 值时您提供默认值。
在这种情况下我会使用:
phoneKeyValue = UserDefaults.standard.string(forKey: "phoneKey") ?? ""
nameKeyValue = UserDefaults.standard.string(forKey: "nameKey") ?? ""
emailidKeyValue = UserDefaults.standard.string(forKey: "emailIDKey") ?? ""
var qrgeneratestring = nameKeyValue + emailidKeyValue + phoneKeyValue