问题标签 [swift-protocols]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 我的模板/通用 Swift 初始化程序/构造函数有什么问题?
我创建了一个 SlidingNavigationController,我想在其中创建一个带有三个参数的初始化程序。所有三个参数都应该是 UIViewControllers 但他们需要确认我的 SlidingIconProtocol。所以我写了这样的代码(简化版):
问题是 Swift 无法在最后一行代码上编译:“无法使用类型为 '(centralVC: CentralVC, leftVC: LeftVC, rightVC: RightVC)' 类型的参数列表调用类型 'SlidingNavigationController' 的初始化程序”
不知道为什么这不起作用,因为即使是 Swift/Xcode 完成也让我可以选择使用这个初始化程序。并且所有传递的参数都确认到 SlidingIconProtocol。
有谁知道代码有什么问题以及在 Swift 中实现相同目标的正确方法是什么(有可能吗)?
swift - 试图扩展 IntegerType(和 FloatingPointType);为什么不能将所有 Int 类型都转换为 NSTimeInterval
(这可能需要一个更好的标题......)
我想要一组可以在代码中使用的访问器来快速表达持续时间。例如:
这篇文章说明了你不能只用一个简单的新协议、扩展和强制来做到这一点IntegerType
并FloatingPointType
采用它。所以我想我会走更冗余的路线,直接扩展IntegerType
(然后重复代码FloatingPointType
)。
产生的错误令人困惑:
让我困惑的是,它似乎说我不能用 (Self) 做一个 NSTimeInterval() 初始化程序,但是 Self 表示的所有内容都列在下一行,它显示了 NSTimeInterval 的所有可能的初始化程序。我在这里想念什么?
旁白:如果有一篇写得很好的关于 Swift 类型系统和做这些事情的教程,我会很高兴的。Apple 稀疏的 Swift 文档没有很好地涵盖中级/高级的内容
更新/澄清:
我想要的是能够评估上述任何表达式:
此外,我希望这些的返回类型为 NSTimeInterval(Double 的类型别名),例如:
我知道我可以通过简单地扩展来实现这一点,Double
因此Int
:
但我也希望以下表达式起作用:
不过这行不通,因为我只扩展了Int
,而不是UInt
。我可以冗余地扩展Uint
,然后UInt16
,然后Int16
,等等......
我想概括 to 的扩展,Int
如IntegerType
原始清单所示,这样我就可以获得所有整数类型的一般转换。然后对FloatingPointType
而不是专门做同样的事情Double
。但是,这会产生原始错误。我想知道为什么我不能像通常所示的那样扩展 IntegerType。除了列表中显示的之外,是否还有其他IntegerType
采用者使得 NSTimeInterval() 初始化程序无法解析?
swift - 如何制作一个声明协议类型属性的协议?
我正在尝试利用 Swift 中的协议和扩展,但遇到了一个我无法理解的编译错误。
如果我声明两个定义像这样的 Shape 的协议:
现在为了实现这一点,我定义了两个结构,一个用于方形,另一个用于实心填充。像这样:
我收到一个编译错误“类型'Square'不符合协议'Shape'”。如果我强制填充类型为填充,就像var fill : Fill
编译错误消失一样。为什么我不能让 Square 指定更具体的填充类型,那么协议允许什么?
我意识到对于这个特定的示例,我可以通过使用 Enum 进行填充或修改其他内容来改变事情以不使用此模式。我只是想知道为什么我不能让 fill 成为符合协议的类型。
swift - 协议扩展类型 Self 与初始值设定项类型不匹配
假设出于学术目的,我更喜欢这样的表达
而不是股票
由于所有各种 Swift 整数类型都符合IntegerType
协议并且因为似乎有一个Double()
初始化器适合所有类型的 int 类型,所以我想我可以这样:
这不起作用。我想知道为什么?我想知道是否有一些魔法可以使它起作用?一个where
也许?还是与self
参考有关?
我在此尝试的操场控制台中遇到的错误如下:
swift - 协议方法不会在另一个视图控制器中执行
我有一个 rootviewcontroller,我用它来子类化我的所有视图控制器,其中有一个协议,其中有一个我试图执行的方法,视图控制器设置如下
根视图控制器
所以我在我的一个视图控制器中有一个带有 IBAction 的按钮,它应该会触发委托功能。
视图控制器触发功能
因此,在这个视图控制器中,我在 viewdidAppear 中设置了委托,并且还调用了该函数,只是为了现在打印一些东西,只是为了测试目的,但什么也没发生。
视图控制器应该在哪里执行函数
但似乎什么都没有发生......当我调试它时它甚至不执行该功能
swift - Swift:通用协议
我有一些 swift 结构,它们的协议合规性是通过具有相同方法名称的单个扩展生成的,这些扩展的返回类型不同,它们依赖于结构。最重要的是,我想在一个泛型函数中使用它们,该函数为泛型类型调用符合协议的函数)。我试图这样做: //: Playground - 名词:人们可以玩耍的地方
不幸的是,我收到以下错误:/var/folders/sn/78_zvfd15d74dzn01mdv258h0000gq/T/./lldb/3741/playground6.swift:7 :17:注意:协议需要函数 'createMe()' 类型为 ' () -> T ' (又名'<τ_1_0> () -> τ_1_0') 静态函数 createMe()->T;
这里到底有什么不符合的,是否有解决方法?
objective-c - 在 Swift 中实现 Objective C 委托
我有一个 Objective C 类,它的方法如下所示:
我在我的 Swift 类中实现 ClientDelegate,如下所示:
这给了我一个编译错误:
无法分配给属性:“自我”是不可变的
当我删除线条时
代码编译并调用 Client 类中的方法,该类依次向 发送消息receivedMessageFromClient
,但未调用该方法HomeViewController
。除了将 self 指定为委托之外,似乎一切都已设置好。
swift - Swift2 协议扩展 NSObjectProtocol
我想要的是自动实现某些 NSObjectProtocol 的委托方法符合某些协议,但我很努力,没有完成。
演示在下面
更新更准确
==================================================== ========================
我有一个协议PagedLoadable
来获取collectionView需要什么的信息,然后extension NSObjectProtocol where Self: Delegatable
,自动配置对象实现PagedLoadable
swift - swift 2 Func 默认类型参数
给定以下代码:
我现在像这样创建一个函数,
编译器在 post func 上给我一个错误说,
HTTPNetworkWire.Type 的默认参数不能转换为类型 T.type
知道这是为什么吗?虽然 HTTPNetworkWire 符合 NetworkWire、EntityRESTRequest 以及 OctupPromisable!
任何想法将不胜感激。运行 Xcode 7.1.1
objective-c - 使用协议扩展和@objc 时无法编译
我无法编译以下代码,我不知道为什么。为了便于阅读,我将其简化为这一点。
奇怪的是,如果我像这样声明 obj 为 MyClass 类型 -
它工作正常。如果我从协议定义中删除 @objc ,它也可以工作。MyClass 的实例将被 Objective-C 使用,所以我需要使用 @objc。
提前感谢您的帮助。