草庐IT

通用化

全部标签

ios - Swift/如何将字符串添加到方法以使其通用

我有以下代码来处理滑动手势。importFoundationextensionUIViewController{funchandleSwipes(sender:UISwipeGestureRecognizer){if(sender.direction==.Right){self.performSegueWithIdentifier("eventsModally",sender:self)}}}我调用这个方法:letrightSwipe=UISwipeGestureRecognizer(target:self,action:Selector("handleSwipes:"))rightS

ios - 在 Xcode 中为目标添加通用和特定的可本地化文件

我的项目中有两个目标:target1和target2。他们每个人都使用他们的localizable.strings资源进行本地化。但是他们的localizable.strings文件有90%是相同的。我想实现这样的行为:使用通用字符串创建通用本地化文件使用不同的特殊字符串(例如app_name)为每个目标创建可本地化的文件应用程序应首先在目标的localizable.strings文件中搜索字符串,如果该字符串不存在,则在普通文件中搜索我尝试为每个目标添加localizable.string文件,然后创建通用的localizable.string文件(具有target1和target2

Swift 通用问题

我正在关注Apple的Generic教程https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Generics.html.但是在教程的最后。我遇到了一些问题:varmyStack=Stack()myStack.push("a")myStack.push("b")myStack.push("c")vararrayOfStrings=["a","b","c"]ifallItemsMatch(myStack,arrayOfStrings){print(

swift - 如何将通用数字类型 'T' 转换为 CGFloat

我有一个通过通用T类型接受数字类型的类,我希望能够将它转换为CGFloat但它抛出:Cannotinvokeinitializerfortype'CGFloat'withanargumentlistoftype'(T)'我必须在类里面做什么才能成功转换它?CGFloat(self.top)-这是它不喜欢的地方“T”类型定义如下:protocolNumeric:Comparable,Equatable{//init(_v:Float)init(_v:Double)init(_v:Int)init(_v:UInt)init(_v:Int8)init(_v:UInt8)init(_v:Int

swift - 实现公共(public)接口(interface)的类型的通用函数

我想增加我对泛型的了解,但遇到了一个我无法解决的问题。我有两种不同的类型(Int和Double)。两种类型都实现了一个函数advanced(by:).我想创建一个通用函数来调用advanced(by:)在给定类型上。好处是我可以替换intAdvancedByTen(value:)和doubleAdvancedByTen(value:)用一个genericAdvancedByTen(value:).这是我的Playground:letmyDouble:Double=1letmyInt:Int=2funcintAdvanceByTen(value:Int){//Replacethisfun

ios - 从通用返回类型获取实际类型

我在加载特定类型和名称的Nib的UIView上有一个扩展:extensionUIView{classfuncfromNib()->T?{guardletnib=Bundle(for:T.self).loadNibNamed(String(describing:T.self),owner:nil,options:nil)?[0]else{returnnil}returnnibas?T}}现在在我的Hint类(它是UIView的子类)中,我像这样使用上面的扩展:ifletview=Hint.fromNib(){self.addSubview(view)view.frame=self.bou

swift - 从 rawValue 初始化通用类型的枚举

我正在Swift中试验自定义运算符(试验。我不需要讲授自定义运算符为什么不好)我想,嗯,EnumType(rawValue:)有点长.也许我可以找接线员解决这个问题?所以我写道:infixoperator∑func∑(lhs:T,rhs:U.Type){rhs(rawValue:lhs)}如本示例所示,将按预期使用:enumDiceResult:Int{caseone=1,two,three,four,five,six}letroll=1∑DiceResult//DiceResult.one但是我写的代码给了我这个错误:Non-nominaltype'U'doesnotsupporte

swift - 具有通用协议(protocol)类型变量的通用协议(protocol)

我如何创建一个通用协议(protocol),它具有另一个通用协议(protocol)的类型?在我的示例中,我有一个堆,它是一个通用类型的协议(protocol),因为我的堆中可以有任何符合Comparable协议(protocol)的元素。所以在我的priorityQueue中,我也想将其作为协议(protocol)(为了避免代码重复和练习)我希望我的priorityQueue包含一个堆,其中Heap.T等于PriorityQueue.Item,但我不不知道该怎么做。有什么想法吗?当然我可以用“抽象类”来做到这一点,但这不是这里的重点。顺便说一句,下面的代码甚至无法编译代码:publi

具有可选数组的 Swift 4 自定义通用结构表现奇怪吗?

我正在将一个更大的代码库迁移到Swift4。它包括一个实现矩阵的自定义类型。在Swift3.1中,一切都按预期运行良好。我能够将问题减少到两个小代码块。第一个定义结构:structMatrix{vararray:[Element?]=[]mutatingfuncsetup(repeatedValue:Element){letfooTemp=Array(repeating:repeatedValue,count:10)self.array=fooTemp}}当我添加Sequence时,问题本身就来了实现:extensionMatrix:Sequence{typealiasIterator

swift - 试图从工作迭代器模式中获取通用代码

这是工作正常的代码,这是迭代器模式的实现:structCandies{letcandies:[String]}extensionCandies:Sequence{funcmakeIterator()->CandiesIterator{returnCandiesIterator(sequence:candies,current:0)}}structCandiesIterator:IteratorProtocol{letsequence:[String]varcurrent=0mutatingfuncnext()->String?{defer{current+=1}returnsequen