Tag: 字符串

Apple Script中的字符串操作

今天,我发现AppleScript允许我们导入Foundation ,并且我们具有很多功能,包括NSString 。 看我的剧本 使用脚本添加 使用框架“基金会” 属性NSString:对当前应用程序的NSString的引用 这是我可以从字符串中删除最后一个路径组件的方法 在myRemoveLastPath(myPath)上 将myString设置为NSString的stringWithString:myPath 将removeLastPathString设置为myString的stringByDeletingLastPathComponent removeLastPathString作为文本 结束myRemoveLastPath 您需要使用NSString’s stringWithString:为NSString ,并使用as text NSString’s stringWithString:回Apple Script字符串。 您可以通过调用函数。 另一件事是,我们可以支持参数起作用,例如此脚本 在remove:remove_string fromString:source_string上 将s_String设置为NSString的stringWithString:source_string 将r_String设置为NSString的stringWithString:remove_string 返回s_String的stringByReplacingOccurrencesOfString:r_String withString:“” 结束remove:fromString: 原始故事https://github.com/onmyway133/blog/issues/89

iOS基本数据类型

玩字符串: 有很多内置数据类型 *串 *整数 *布尔 *浮动 *两倍以上.. 在这里,我们将讨论字符串。 向用户显示的文本数据,带双引号的值是字符串( 如封面图像 😝)。 我将字符串类型的数据存储在变量中,变量? 变量是数据的表示形式,它在您的程序中的硬件上具有存储位置,它表示某种数据类型的值,我们已经在我的上一篇博客中进行了讨论。 var name =“某些名称” “ Some name”是一个字符串。您不能将另一个数据类型值分配给已定义的值, 如果我分配了怎么办 名称= 50 有一些类型可以定义字符串。 推论类型 var firstName =“您的名字” var middleName =“您的中间名” 这里我们并没有定义这是一个字符串数据类型,它将自动识别为字符串,因为值用双引号引起来。 这称为推断类型。 显式类型 var firstName:字符串=“您的名字” var middleName:字符串=“您的中间名” 在这里,我明确指出这是一个字符串类型,因此称为显式。 好的,我只想再次打印我的全名,名字和姓氏 var =“您的名字为中间名” 无需再次输入全名,因为我们已经存储了两个变量。 所以, var fullName = firstName +““ + middleName 在这里,我将两个变量互连在一起 ,这被称为串联,并且+““ +是用于空格,即空字符串。 我们可以通过2种方法将变量值分配给新变量 如上所见,一种是串联或字符串操作 […]

Swift中的字符串,字符和性能-深入探讨

扫描令牌所用时间的三分之二全部花在了用于Character类型的初始化程序中。 到底是怎么回事? 初始化程序的第一个参数标签提供了一个小提示: _builtinExtendedGraphemeClusterLiteral 。 注意单词“ literal”。此初始化程序不用于从我要遍历的字符串中提取Character值; 它用于从源代码中其他地方的文字文本创建Character值。 在nextToken下找到这些标记的唯一地方是我的令牌生成器的switch/case模式。 他们真的造成那么多的开销吗? 我们可以让Swift编译器使用-emit-sil选项发出“规范SIL”(Swift中级语言),以更仔细地了解如何将这些case模式编译为较低级的代码。 (我在存储库中包含了一个小脚本,该脚本可以执行此操作,并且还可以分解Swift符号。)让我们找到与匹配逗号字符的case模式对应的SIL(为简洁起见,重新格式化了行号和范围): %448 = string_literal utf8“,” %449 =应用%26(%448,%23,%24,%25): $ @ convention(method) (Builtin.RawPointer,Builtin.Word, Builtin.Int1,@ thin Character.Type)-> @owned字符 %449的第二行和第三行所示的方法签名%449其放弃,但我们可以通过查看值%26来确认它,该值是被调用的函数: %26 = function_ref @ Swift.Character.init( _builtinExtendedGraphemeClusterLiteral:Builtin.RawPointer, utf8CodeUnitCount:Builtin.Word, isASCII:Builtin.Int1)-> Swift.Character : $ @ convention(method)(Builtin.RawPointer,Builtin.Word, Builtin.Int1,@ thin Character.Type)-> @owned字符 这是什么意思呢? 这意味着, 每次通过扫描循环(即,针对字符串中的每个字符)时,Swift都会调用此初始化程序来创建case模式中的每个字符,以便将当前字符与该模式进行比较,直到找到匹配项为止;并且该初始化程序如果您习惯于字符类型实际上只是一个数字代码单元的语言,则它的成本将大大超出您的预期。 通过查看Swift标准库源代码,我们可以看到将字符串文字(例如”,” )转换为Character时发生的动作序列: 编译器将UTF-8编码的文字表示形式嵌入可执行文件的数据段中。 在使用文字的地方,Swift调用Character.init(_builtinExtendedGraphemeClusterLiteral:utf8CodeUnitCount:isASCII) , Character.init(_builtinExtendedGraphemeClusterLiteral:utf8CodeUnitCount:isASCII)其传递步骤1中嵌入的字符串数据的地址(源)。 反过来,此初始化程序在String上调用相同的初始化程序。 最终,分配了StringBuffer […]

iOS上的文本属性:轻松的方法

每个iOS开发人员在发现问题后都会感到a肿–他必须使用动态文本来实现标签,如下所示: 您知道您必须动手使用Apple的NSAttributedStringKeys字典,定义它们的键并附加所有这些AttributesTexts。 哦,我的……😱 然后您将开始执行以下操作: 在定义完字典之后,您将开始构建AttributedTexts,将其附加到最后将其分配给标签。 但… Xcode在Interface Builder中内置了一个漂亮的属性文本编辑器。 这让我想知道🤔 为什么不使用它,避免在源文件中对所有这些属性进行硬编码,而在xib中对其进行硬编码,而不是在您已经对许多属性进行硬编码的地方。 是的,但是我们如何在运行时动态更改这些内容? 您可以像使用静态文本生成器那样在界面生成器中构建属性文本,并填写一些占位符(例如),稍后我们将使用实际值替换这些占位符,并保留属性。 听起来不错,对吧? 2.您必须在utils文件中的某个位置定义扩展名,我将其命名为AttributeString + Replace。 我是 tapptitude 的iOS开发人员, tapptitude 是一家移动应用程序开发机构,专门为全球的初创企业和品牌构建高质量的iOS和Android应用程序。 查看我的其他帮派->

在Unity中实现Swift

这是我以前的文章中关于与ARKit一起在Unity中实现CoreML的后续文章。 学习完本教程后,您可以做什么。 您可以在Unity项目中使用任何Swift代码。 您可以从Unity调用Swift void,但也可以调用实际的返回类型。 您可以将变量从Unity传递给Swift函数。 您可以从Swift字符串转换为C#字符串(听起来更复杂)。 首先,在Unity中使用Swift。 让我们从Unity的Swift开始,最简单最重要的事情开始。 我之前的许多人已经做到了这一点,尤其是对于Unity 5.6及更低版本。 最近人们很难使其在Unity 2017或更高版本中工作。 在许多教程的帮助下,我使它可以在Unity 2017及更高版本中使用,一直到Unity 2018.2 beta为止。 所以我们开始: 步骤1:建立可可触控框架 打开Xcode时,创建一个新项目,然后选择“ Cocoa Touch Framework”并命名为任意名称。 我将其命名为“ SwiftPlugin”。 当然,语言是“快速”,您可以保留“包括单元测试”。 为了使事情井井有条,请在“ SwiftPlugin”文件夹中创建一个新文件夹。 并将其称为“来源”。 步骤2:开始编写您的Swift代码。 首先,我们在“ Source”文件夹中创建一个Swift文件。 我称我为“ SwiftForUnity.swift”。 将以下代码粘贴到您的.swift文件中: 进口基金会 导入UIKit @objc公共类SwiftForUnity:UIViewController { @objc静态让共享= SwiftForUnity() @objc func SayHiToUnity()->字符串{ 返回“嗨,我是斯威夫特” } } @objc表示该类和函数可以在Objective-c中使用,我们稍后需要在C#中使用它。 同样,您希望对Objective-C可见的所有类都需要从NSObject继承,因为UIViewController已经从NSObject继承了,所以无需在这里再次添加它。 编写Swift代码后,您需要制作一个Objective-C ++文件并将其命名为“ SwiftForUnityBridge.mm”。 您需要将其从“ SwiftForUnityBridge.m”重命名为“ SwiftForUnityBridge.mm”。 […]

字符串(不是理论上的)更新

考虑到我无法购买Apple提倡的许多新配件,我将讨论让Swift 4感到兴奋的一些更新。 如果您有Apple开发人员帐户,请随时下载Xcode的新测试版,这将使您可以使用Swift 4。 字串: 没有人喜欢被串在一起。 如果您从一开始就善于沟通,要么是朝着某个方向前进,要么是建立一种无拘无束的情境。 在当今的现代约会中,似乎我们把Strings做错了,并最终试图纠正这一点。 迭代: 我最终可以访问字符串对象的每个字符,而无需访问characters方法! 数数: 没有什么比自动计数您的字符计数要好了。 我终于可以再次从Strings中受益,进行收集处理。 您是否曾经使用过一个字符串并且只想删除第一个字母? 好吧,现在您可以放下它,就像它很热一样。 相反: 此外,能够访问您的字符串字符并立即反转它们是改变游戏规则的人。 在解决与字符串相关的问题时,我常常不得不依靠能够实现这些方法所能实现的扩展。 这更加直观,将字符串作为序列/集合返回到一个值得尊重的地方。

在Swift 4.0中使用索引循环字符串字符

假设您要在for循环中使用索引值来打印字符串的每个字符,执行此操作的一种非常简单的方法是:- let name =“ nick” //我们要打印的字符串。//0 .. <将为0中的i给出从0到(string.length-1)的数字范围。.<name.count { //在Swift中不允许使用操作名[i],或者让索引= name.index [name.startIndex,offsetBy:i] print(name [index]) } 之所以不允许使用name [i],是因为每个字符需要不同的内存量来存储,因此为了确定哪个字符位于特定位置,您必须从每个String的开头开始读取,并向前移动(偏移)1。如代码所示: //从start-index开始并向前迭代1 让索引= name.index [name.startIndex,offsetBy:i]

闪电阅读之二:可选的字符串陷阱

前几天,我试图建立一个URL。 检查以下代码块: 初始化?(userId: String? ){ 后卫userId!= nil else {return nil} self.path =“ / user / \(userId)” self.url.appendPathComponent(self.path) } 看起来合法吧? 假设我们将23940作为userId传递给此初始化程序。 根据Swift版本,路径值为: Swift 2.x路径=“ / user / 23940” Swift 3.x路径=“ / user / Optional(” 23940“)” Swift 4.x路径=“ / user / Optional(” 23940“)” 微妙,但令人心碎。 首先,如果您正在处理由于某种原因仍使用Swift 2.x的超老项目,并计划进行迁移,请提防此问题。 其次,我们可以在此处使用Guard-let代替Guard-check语句来解决此问题。 但是,到处都有保护语句并不方便,尤其是当您只想打印内容时。 我创建了以下结构来克服此问题: 公共结构Printable :CustomStringConvertible { 公众让价值:T? public init(_ value:T?){ self.value […]

Swiftの复数行Stringリテラルまとめ

\ nをやらなくてもよい 今更ながらSwiftの复数行Stringリテラルをを知ってわりと喜ばしいので,ここにまとめる。 Swiftのバージョンは4.2 基本 3つのダブルクオテーションで次ように囲む。 让sampleString =“”“ あいうえおかきくけこさしすせそ “” 来の方式で表した次のものと同等である。 “あいうえお\ nかきくけこ\ nさしすせそ” すべースコード上の改行が生成物に残る。注意すべきことは「あ」の前と「そ」の后に\nがないこと。 単独の”の扱い ひとつの”を终わりの记号と见なさないので,自由に”を含めることが出来る。 let quotation =“”“ 白兔戴上眼镜。 “我从哪里开始, 请your下?”他问。 国王严肃地说:“从头开始,继续 直到你走到尽头 然后停下来。” “” 3つの“の扱い “を3つ连続したいときは,\を用いて,裸の”が3つ并ぶのを回避する。 让threeDoubleQuotationMarks =“”“ はじめのひとつをエスケープ\“”“ 3つ全部をエスケープ\“ \” \“ “” 生成したものの中身は はじめのひとつをエスケープ“”“ \ n3つ全部をエスケープ”“” 改行コードを入れない 特定の行に改行コードを入れないことが出来る。\を用いる。 让sampleString =“”“ あいうえおかきくけこ\ さしすせそ “” これは次と同等 “あいうえお\ nかきくけこさしすせそ” 始めと终わりに改行コードを入れる 始めと终わりに改行コードをいれるには空の行を追加すればよい。 让sampleString =“”“ あいうえおかきくけこさしすせそ […]