我有一个快速的方法,比如:
public func xIndexAtPoint(point: CGPoint) -> Int?
我想将它公开给Objective运行时,所以我在它前面添加了@objc。
Method cannot be marked @objc because its result type cannot be represented in Objective-C
我不知道为什么不允许可选的值,因为苹果在中没有提到它
只要与Objective兼容,就可以访问使用@objc属性标记的类或协议中的任何内容。这不包括Swift特有的功能,如此处列出的特性:
Generics
我正在尝试从Java切换到Swift,并提高我在这门语言中的编程技能。 然而,在研究了以下内容后,我在理解泛型在Swift中的工作方式时遇到了一些困难: https://docs.swift.org/swift-book/LanguageGuide/Generics.html 我已经开始通过编写一些协议来编写遗传算法。 protocol Point : Equatable {
var identifier: String { get }
var x: Double { get }
var y: Double { get }
func distance<P
我是一个有经验的程序员,但我最近才开始学习Swift (第4版)。
我发现很难完成简单的任务,甚至像“给我这个String的第四个String”。
我试着编写这两个简单的函数:
// isHexCharacter returns whether a Character is hexadecimal or not
func isHexCharacter(_ c: Character) -> Bool {
switch c {
case "0", "1", "2", "3", "4", "
我读过关于Apple developer站点的Swift教程,但是我不理解Generics的概念。有人能用简单的方式来解释吗?例如:
func swapTwoValues<T>(inout a: T, inout b: T) {
let temporaryA = a
a = b
b = temporaryA
}
我正在使用Swift并尝试创建一些集合对象。这些集合对象有一个用于保存自定义对象的后备Dictionary。例如,对象的类型可能是Cat,而集合对象的类型可能是Cats。Cats将拥有一个包含Cat类型的值的私有字典。我还有其他类型,它们也需要各自的集合(每个集合类型都有对应于它所持有的类型的特定逻辑)。
我创建了一个协议,以确保每个集合都有一些共同的特征。这些常见的函数和下标通常是到后备字典的直通。协议如下:
protocol ObjectDictionaryProtocol {
// These are necessary for generics to work in prot
我想说,我对Swift相当陌生,我正在探索CoreData的概念。我尝试用一个ToDo列表应用程序进行测试,该应用程序在欢迎屏幕上显示用户创建的任务类别,在单击任何类别时,用户将看到该组中的所有任务。我试图创建一个类似ToDoListViewController<T: NSManagedObject>的泛型类,并实现两个视图控制器(CategoryViewController、TaskViewController)都可用的功能。在该类中,我创建了一个函数loadItems,它以一个predicate作为参数,并将来自fetch请求的项填充到页面中。因此,代码大致如下:
class
如何使用自定义函数utils扩展Swift的Array<T>或T[]类型?
浏览一下Swift的API文档,就会发现数组方法是T[]的扩展,例如:
extension T[] : ArrayType {
//...
init()
var count: Int { get }
var capacity: Int { get }
var isEmpty: Bool { get }
func copy() -> T[]
}
当复制和粘贴相同的源代码并尝试任何变体时,例如:
extension T[] : ArrayType {
我有一个小型通用Swift结构,如下所示:
public protocol FilterOption: Equatable {
var name: String { get }
}
public struct Filter<T: FilterOption> {
public init(selected: [T], available: [T]) {
self.selected = selected
self.available = available
}
public static var empty: Fil
在WWDC19会话204中,演示了如何使用SWIFT5.1和List函数构建UI。我想使用核心数据,而不是有一个数据文件。问题是核心数据实体不符合可识别的协议。
我已经在网上进行了广泛的搜索,并观看了几个核心数据视频,但它们都过时了。它们都没有涵盖SWIFT5.1和新测试版函数(如List)。
我创建一个包含一些字段的实体(名称,id ->,它是UUID)。然后手动生成如下所示的源文件:
AccountsMO+CoreDataClass.swift**:**
import Foundation
import CoreData
public class AccountsMO: NSMa
假设我有一个对象,它可以有几种枚举之一。我怎样才能使这符合可编码?
protocol Status : Codable {}
enum StatusA : String, Status {
case a = "a"
case b = "b"
}
enum StatusB : String, Status {
case x = "x"
case y = "y"
}
class ProdEvent : Codable {
let status : Status // doesn't co
我有个普通课,
class ComputeScalar<T> : IComputeVariable where T : struct
{
// This is why i have to use generics.
ComputeBuffer<T> buffer;
T data;
}
class ComputeArray<T> : IComputeVariable where T : struct
{
// This is why i have to use generics.
ComputeBuffer<T>
协议和类绑定协议有什么区别,我们应该在Swift中使用哪一种协议?
protocol A : class { ... }
protocol A { ... }
当未将协议定义为weak时,尝试添加: class委托时会出现错误
protocol A { ... }
weak var delegate: A
给出错误:
“弱”不能应用于非类类型。
或
不能将“弱”应用于非类绑定的“A”;考虑添加具有类约束的协议一致性。
我是Swift的新手,我正尝试在实践应用程序中实现一个定制的UIKeyCommand架构。我为基本UISplitViewController编写了下面的扩展,以显示屏幕上当前视图中的所有UIKeyCommands。
extension UISplitViewController {
open override var canBecomeFirstResponder: Bool {
return true
}
var BPKeyCommands: [BPKeyCommand]? {
var commands: [BPKeyCommand]
在Apple的Swift编程指南中,将介绍如何在协议中使用the别名关键字(参见Generics一节)
protocol Container {
typealias ItemType
mutating func append(item: ItemType)
var count: Int { get }
subscript(i: Int) -> ItemType { get }
}
然后执行:
struct IntStack: Container {
typealias ItemType = Int // can sometimes be left out and in
下面的代码用于我在SWIFT3.2中工作,但是随着Swift 4的最新发布,我得到了一个奇怪的错误,我无法理解。
我正在尝试创建一个类似这样的通用协议:
public protocol FactoryComponent {
associatedtype Argument
associatedtype Service
static var factory: (Resolver) -> (Argument) -> Service { get }
}
public extension FactoryComponent {
public typealias Facto
以下代码是有效的Swift代码,在禁用优化时确实正确编译。
protocol Foo {
var bar: String { get set }
}
class BaseFoo: Foo {
var bar: String = "hello"
}
class ChildFoo: BaseFoo {
private var _bar: String = "world"
override var bar: String {
get {
return _bar
}
如何在Swift中声明一个可以保存任何enum字符串类型值的数组?
我想做的是:
enum MyEnumType1: String {
case Foo = "foo"
case Bar = "bar"
}
enum MyEnumType2: String {
case Baz = "baz"
}
// ...
// Compiler error: "Type of expression is ambiguous without more context"
var myArray = [ MyEnum
我正在尝试编写一个类可以实现的接口,使它们“可复制”,这是一个(类型)安全的克隆。
在Java中,我会使用递归泛型执行类似的操作:
public interface Copyable<C extends Copyable<C>> {
C copy();
}
public class Example implements Copyable<Example> {
...
@Override
public Example copy()
{
return new Exampl
考虑以下扩展:
extension Array where Element == String {
func foo(){
}
}
然后考虑下面要分割的字符串,这样我就可以使用扩展名.
let string = "This|is|a|test"
let words = string.split(separator: "|")
问题是words是一个[Substring],而不是[String],所以我不能调用foo()。
因此,在Swift 4中,如何拆分字符串以返回[String]而不是[Substring]
我正在尝试使用NSKeyedArchiver快速保存一个非常简单的对象,我看到它保存的是正确的、带有值的,但是每当它试图解码保存的数据时,它就会失败。我是新的斯威夫特,我尝试谷歌和os_log (ing)的一切,但我不知道问题在哪里。这是我想要保存的东西..。
class TrackedAmount: NSObject, NSCoding {
var cups: Int
var fraction: Float?
struct PropertyKey {
static let cups = "cups"
static let fraction = &
过去几年我一直在Java工作,现在正在学习Swift。我试图在Java中实现Swift抽象类,发现Swift不支持它。我还看到了abstract类可以通过protocol来实现,但是由于我的类包含泛型类型,所以我对它感到有点困惑。
我创建了一个Java类结构,并试图将其转换为Swift,但失败了。这是一堂课
import java.util.List;
import java.util.ArrayList;
public class HelloWorld{
public static void main(String []args){
D d = new D();