当前位置: 首页 > 知识库问答 >
问题:

迅速处理无[重复]

公孙琛
2023-03-14

我是Swift新手,这段代码给了我一个错误,尽管它没有文本,但它还是通过了“lastname!=nil”。

线程1:致命错误:在展开一个可选值时意外地找到nil

func imageFromInitials(firstName: String?, lastName: String?, withBlock: @escaping (_ image: UIImage) -> Void) {

var string: String!
var size = 36

if firstName != nil && lastName != nil {
    string = String(firstName!.first!).uppercased() + String(lastName!.first!).uppercased()
} else {
    string = String(firstName!.first!).uppercased()
    size = 72
}

我很困惑,不知道为什么验证不起作用

共有1个答案

印瑾瑜
2023-03-14

字符串为空与为零并不相同。您还需要检查字符串是否为空,或者只是安全地打开名字和姓氏的第一个字符:

func imageFromInitials(firstName: String?,
                       lastName: String?,
                       withBlock block: @escaping (_ image: UIImage) -> Void) {
    let string: String
    let size: Int

    if let firstInitial = firstName?.first {
        if let lastInitial = lastName?.first {
            string = (String(firstInitial) + String(lastInitial)).uppercased()
            size = 36
        } else {
            string = String(firstInitial).uppercased()
            size = 72
        }
    } else {
        string = ""
        size = 36
    }

    // the rest of your function
}

或者,如果您想用一种更“快速的™”的方式来完成它(如果您可以在只提供lastname的情况下生成一个非空的字符串),那么您可以这样做:

func imageFromInitials(firstName: String?,
                       lastName: String?,
                       withBlock block: @escaping (_ image: UIImage) -> 
    let string = [firstName, lastName]
        .compactMap { $0?.first }
        .map { String($0) }
        .joined()
        .uppercased()

    let size = string.count == 1 ? 72 : 36

    // the rest of your function
}
 类似资料:
  • 问题内容: 我有一个尝试转换为Swift 3的Gradient类,但是出现以下错误 迅速无法使用“ CGPointMake” 对于 任何人都可以帮我解决我可以代替的东西 这是全班; 问题答案: 您可以迅速创建一个快捷方式。因此,将您更改为

  • 在WWW中我发现了一个面试问题,其中一个是: 下面代码段的输出是什么: 答案是: 我正在Xcode中运行这段代码,结果是: 请帮我了解一下是怎么一步一步进行的。我对正在发生的事情有想法,但不确定。什么是Kondana类,为什么使用上面的语法,我知道这是通用的,但不理解输出?

  • 问题内容: 迅速有没有通过声明?例如,如果我执行以下操作 案例“一”和案例“二”是否可以执行相同的代码? 问题答案: 是。您可以按照以下方式进行操作: 另外,您可以使用关键字:

  • 问题内容: 我想要一个数字数组上的函数(或任何可加的事物的有序集合),该函数返回长度相同的数组,其中每个元素是A中所有元素的总和, 直到一个include。 例子: 我可以使用for循环或其他方式执行此操作。还有更多功能选择吗?它有点像reduce,只是它会构建一个包含所有中间值的结果数组。 更通用的是具有可以接受任何序列并提供输入序列的总运行时间的函数。 问题答案: 您正在寻找的通用组合器通常称

  • 问题内容: 如何迅速地建立代表? 问题答案: 它与obj-c没什么不同。首先,您必须在类声明中指定协议,如下所示: 该实现将如下所示: 当然,您必须设置委托。例如:

  • 问题内容: 我通常会隐藏状态栏 但是Xcode给我一个错误,说“方法不会覆盖 其超类中的任何内容”。 如果我删除override,则Xcode会给出另一个错误:“ 带有Objective-C选择器’prefersStatusBarHidden’的方法’prefersStatusBarHidden()’与 具有相同Objective-C选择器的 超类 ‘UIViewController’的gette