Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Swift 3中搜索和提取子字符串_Ios_Swift3 - Fatal编程技术网

Ios 在Swift 3中搜索和提取子字符串

Ios 在Swift 3中搜索和提取子字符串,ios,swift3,Ios,Swift3,相对较新的快速编程 我得到一个字典,需要从中获取用户名(名字和姓氏),并将其与其他数据一起显示在表视图单元格中 在iPhone5和更低版本上,由于屏幕宽度只有320,所以要求只显示姓氏的名字和第一个字符 例如:“霍华德马克”到“霍华德M” 我确信有一种优雅的方法可以提取所需的字符串 struct ScreenSize { static let SCREEN_WIDTH = UIScreen.main.bounds.size.width static let SCREEN_HEIG

相对较新的快速编程

我得到一个字典,需要从中获取用户名(名字和姓氏),并将其与其他数据一起显示在表视图单元格中

在iPhone5和更低版本上,由于屏幕宽度只有320,所以要求只显示姓氏的名字和第一个字符

例如:“霍华德马克”到“霍华德M”

我确信有一种优雅的方法可以提取所需的字符串

struct ScreenSize
{
    static let SCREEN_WIDTH = UIScreen.main.bounds.size.width
    static let SCREEN_HEIGHT = UIScreen.main.bounds.size.height
    static let SCREEN_MAX_LENGTH = max(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
    static let SCREEN_MIN_LENGTH = min(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
}

struct DeviceType
{
    static let IS_IPHONE_5_OR_LESS = (UIDevice.current.userInterfaceIdiom == .phone && ScreenSize.SCREEN_MAX_LENGTH <= 568.0)
}

func functionCall (referralData:[String: Any?])
{
    var myMutableString = NSMutableAttributedString()


    if var nameString = referralData[KEY_FULL_NAME]
        {

              if  DeviceType.IS_IPHONE_5_OR_LESS
              {
                var a = nameString as? NSString

                var arr = a?.components(separatedBy: " ")

                let newStr = arr?[0] as? String
                nameString = newStr
                if((arr?.count)! > 1)
                {
                    if let secondString = arr?[1]
                    {
                        let newStr2 = newStr as? NSString

                        let secondChar = newStr2?.character(at: 0)
                        let stringchar:String! = String(secondChar!)
                        nameString = "\(newStr!) \(stringchar)"
                    }
                }

                print("iPhone 5 or less")
            }
            else
            {
                print("Greater than iPhone 5")
            }
    }
}
struct屏幕大小
{
静态let SCREEN_WIDTH=UIScreen.main.bounds.size.WIDTH
静态let SCREEN_HEIGHT=UIScreen.main.bounds.size.HEIGHT
静态let SCREEN_MAX_LENGTH=MAX(ScreenSize.SCREEN_WIDTH,ScreenSize.SCREEN_HEIGHT)
静态let SCREEN\u MIN\u LENGTH=MIN(ScreenSize.SCREEN\u WIDTH,ScreenSize.SCREEN\u HEIGHT)
}
结构设备类型
{
静态let为IPHONE 5或更小=(UIDevice.current.userInterfaceIdiom==.phone&&ScreenSize.SCREEN最大长度1)
{
如果让secondString=arr?[1]
{
让newStr2=newStr作为?NSString
设secondChar=newStr2?.character(位于:0)
让stringchar:String!=String(secondChar!)
nameString=“\(newStr!)\(stringchar)”
}
}
打印(“iPhone 5或更低版本”)
}
其他的
{
打印(“大于iPhone 5”)
}
}
}
也许是这样

let fullName = "Dominik Pich"
var parts = fullName.components(separatedBy: " ")

if parts.count > 0,
  let lastNameInitial = parts.last?.prefix(1) {
  parts[parts.count-1] = String(lastNameInitial)
}

let truncatedName = parts.joined(separator: " ")

//use
print("fullName: \(fullName)")
print("truncatedName: \(truncatedName)")


我会用一个漂亮的字符串扩展名来包装它-例如,一个计算属性
truncateLast

使用Swift的内置子字符串命令时,我发现最有用的答案如下:

尽管如此,使用substring命令仍然需要首先获取范围或索引,因此它仍然需要几个命令来实现

因此,使用上面提到的So答案中我的首选方法,我只需获取第一个字符的索引,并使用substring命令将其转换为字符串:

let index = secondString.index(secondString.startIndex, offsetBy: 0)
let stringChar = String(secondString.substring(to: index))

我还想让您知道,在获取姓氏的第一个字母时,代码中似乎存在逻辑错误。如果让secondString=arr?[1]打开字符串组件数组中的姓氏,但在解析字符串中的第一个字符之前,不要将存储在
secondString
中的打开的字符串分配给
newStr2
。现在,当您使用
let secondChar=newStr2?.character(at:0)
解析字符串的第一个字符时,您将实际解析来自名字的第一个字符(因为当用
let newStr2=newStr作为?NSString
分配newStr2时,实际上是在分配名称字符串数组中的第一个条目,因为newStr只与
let newStr=arr?[0]作为?String
分配)

我认为任何人都不应该再考虑使用Swift 3了。下面是一个Swift 4示例:

var name = "Veeblefetzer Rumplestiltskin"
if let r = name.range(of: " ", options: .backwards, range: name.startIndex..<name.endIndex) {
    name = String(name[name.startIndex..<name.index(r.upperBound, offsetBy: 1)])
}
name // "Veeblefetzer R"
var name=“Veeblefetzer Rumplestiltskin”

如果让r=name.range(of):“,选项:。向后,范围:name.startIndex..不相关,但为什么要将非可选的
nameString
强制转换为可选的
NSString
?为什么要将非可选字符串
stringchar
注释为隐式未包装的可选字符串?
我得到了一本字典,需要从中获取用户名(名字和姓氏)
-源词典中的名字和姓氏是否分开?