小编sha*_*ght的帖子

默认情况下,类方法访问级别内部

通常你的班级有很多方法.将所有这些的访问修饰符设置为私有并且保持一个或两个没有访问修饰符很烦人.

有没有办法让所有方法默认为私有,并将访问修饰符赋予公共方法?也许通过为类分配访问修饰符.

ios swift swift3

3
推荐指数
1
解决办法
132
查看次数

如何在 MSStickerBrowserViewController 中设置stickerSize

当我按照文档建议通过将其嵌入容器视图(使用故事板)来创建 MSStickerBrowserViewController 子类时,我似乎没有机会设置贴纸大小。Sticker Browser VC 是用 init(coder:) 初始化的,我无法看到覆盖 get-only 属性stickerSize。我只能得到stickerSize = MSStickerSize.regular。

我也没有在界面生成器中看到任何控件来配置属性,尽管文档说“您还可以自定义浏览器内贴纸的大小。”

多亏了shallowThought,我看到在MSStickerBrowserViewController 上可以使用初始化器init(stickerSize: MSStickerSize),但到目前为止,我一直无法找到在使用故事板并覆盖所需的init(coder:) 初始化器时触发该初始化器的方法。

我错过了什么吗?

谢谢!

ios swift swift3 mssticker

3
推荐指数
1
解决办法
334
查看次数

故事板仅以 XML 显示

突然间,我的项目的 .storyboard 文件仅以 XML 显示。

在此处输入图片说明

我很清楚“右键单击”->“打开为”->“故事板”选项,但是没有出现。它只显示“无”。

在此处输入图片说明

我该如何解决这个问题,以便我可以将我的故事板作为实际的故事板打开?

xcode storyboard ios

3
推荐指数
1
解决办法
798
查看次数

如何在where子句中使用协议扩展

protocol aView: class { } 

extension aView where Self: UIView { }
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我理解这段代码吗?

where-clause swift swift-protocols

3
推荐指数
1
解决办法
2647
查看次数

使用“开放”和“公开”

我已经阅读了有关新修饰符“open”和“fileprivate”的文档。但有两件事我不明白:

  1. 为什么不能将协议或扩展声明为“开放”?这是否意味着不可能在模块之外使用这些东西?
  2. 如果我不想为模块构建类,而是为通用应用程序构建类,那么我是否应该将我的类和方法声明为“开放”,或者仅将它们保留为“公共”是一个好习惯吗?

modifiers swift swift3

3
推荐指数
1
解决办法
3487
查看次数

无法使用NSCoding反序列化嵌套类

我有一个复杂的类,有很多嵌套类到多个深层,它们被序列化并存储在CoreData表中.问题是,由于升级到Swift 3类的实例无法反序列化,因此在尝试解码嵌套类的实例时失败.

为了说明问题,使用实现NSCoding的内部类创建一个类定义:

进口基金会

class Foo : NSObject, NSCoding {

    class Bar : NSObject, NSCoding {
        var x : Int

        init(x:Int) {
            self.x = x
        }

        required init?(coder aDecoder: NSCoder) {
            self.x = aDecoder.decodeInteger(forKey: "x")
        }

        func encode(with aCoder: NSCoder) {
            aCoder.encode(x, forKey:"x")
        }
    }

    var bar:Bar

    init(x:Int) {
        self.bar = Bar(x: x)
    }

    required init?(coder aDecoder: NSCoder) {
        self.bar = aDecoder.decodeObject(forKey: "bar") as! Bar
    }

    func encode(with aCoder: NSCoder) {
        aCoder.encode(bar, forKey:"bar")
    }
}
Run Code Online (Sandbox Code Playgroud)

然后构建单元测试:

import XCTest
@testable import …
Run Code Online (Sandbox Code Playgroud)

swift swift3

3
推荐指数
1
解决办法
484
查看次数

为什么Dispatch Group Notify被叫两次?

我正在尝试让我的应用程序使用调度组来确保在继续之前已发送所有邀请.我认为notify只有在enters匹配后才会调用回调,leave但我的多次调用似乎是多次调用,这是我的代码:

    for invite in invites {
        dispatchGroup.enter()
        let ref = FIRDatabase.database().reference().child("users").child(invite.id).child("invites")
        print(invite)
        ref.updateChildValues([name: nameTextField.text!]) { (error, ref) -> Void in
            dispatchGroup.leave()

            dispatchGroup.notify(queue: DispatchQueue.main, execute: {
                print("YOYOYO")
            })
        }
    }
Run Code Online (Sandbox Code Playgroud)

在我的控制台中,我看到2个"YOYOYO"让我很困惑.任何人都可以告诉我,如果我这样做不正确或者我的假设是错误的吗?

grand-central-dispatch firebase swift swift3

3
推荐指数
1
解决办法
980
查看次数

线程池:DispatchQueue.main.async

我从事过Java工作,并且对线程和线程池的工作非常清楚.

我想知道是否有人能解释如何创建线程的工作并在swift的线程池中分配空间?

还有

Dispatch.main.async {
 // some code
}
Run Code Online (Sandbox Code Playgroud)

创建新线程还是异步执行任务?

在此先感谢=)

grand-central-dispatch threadpool ios swift swift3

3
推荐指数
1
解决办法
1290
查看次数

连接到本地套接字

我一直在尝试创建到本地套接字文件的连接,但 errno 总是返回 -1

var socketPath = "/path/to/socket"

let sockDesc = socket(AF_LOCAL, SOCK_STREAM, 0)

var address =  sockaddr_un()
address.sun_family = UInt8(AF_LOCAL)
address.sun_len = UInt8(bitPattern:Int8(MemoryLayout<sockaddr_un>.size))

let dataPtr = UnsafeMutablePointer<Int8>(&address.sun_path.0)
strncpy(dataPtr, socketPath, socketPath.characters.count)

let result = withUnsafePointer(to: &address) {
    $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {

        connect(sockDesc, $0, socklen_t(MemoryLayout<sockaddr>.stride));
    }
}
Run Code Online (Sandbox Code Playgroud)

套接字是有效的,作为用 Qt 开发的另一个客户端可以愉快地连接到该路径。

这里有明显的错误吗?或者这应该有效吗?

sockets swift

3
推荐指数
1
解决办法
866
查看次数

如何在序列的最后一次出现时拆分字符串

目标:带有内置分隔符的字符串应拆分为一个 int 和另一个字符串。如果分隔符序列 '###' 出现多次,则字符串应始终拼接在最后一个 '###' 处。

是否有像 string.lastIndexOf("###") 这样的运算符,就像在 C# 中一样?

这是我的解析器的样子:

func parseTuple(from string: String) -> (String, Int)? {
    let parsedString = string.components(separatedBy: "###")
    if let tupleString = String(parsedString[0]), let tupleInt = Int(parsedString[1]) {
        return (tupleString, tupleInt)
    } else {
        return nil
    }
}
Run Code Online (Sandbox Code Playgroud)

string split swift

3
推荐指数
1
解决办法
1353
查看次数