我正在尝试使用更新的SPM for Swift4与以下Package.swift文件 - PackageDescription API Version 4
import PackageDescription
let package = Package(
name: "Name",
dependencies : [
.package(url: "url", .branch("swift4"))
],
exclude: ["Tests"]
)
Run Code Online (Sandbox Code Playgroud)
我也有正确版本的SPM:
Apple Swift软件包管理器 - Swift 4.0.0-dev(swiftpm-13081.9)
但我无法通过swift build命令构建库.我看到以下错误:
...错误:类型'版本'没有成员'分支'
Swift的新手.我下面有两个片段:
NotificationCenter.default.addObserver(self,
selector:#selector(ViewController.notificationReceived),
name: Notification.Name(rawValue: name), object: nil)
@objc func notificationReceived(notification:Notification){
let x = notification.userInfo!
print("\(x["name"]!)")
}
Run Code Online (Sandbox Code Playgroud)
最后
let x:UITapGestureRecognizer = UITapGestureRecognizer(target: self,
action: #selector(tapped))
self.addGestureRecognizer(x)
func tapped(){
print("tapped")
self.delegate!.theViewTapped()
}
Run Code Online (Sandbox Code Playgroud)
为什么这个notificationCenter?我应该提供参数的@objc标签,selector但不提供UITapGestureRecognizer动作参数?
Selector和Action inSwift有什么区别?
假设我有这个结构:
struct MyStruct {
let x: Bool
let y: Bool
}
Run Code Online (Sandbox Code Playgroud)
在Swift 4中,我们现在可以使用myStruct[keyPath: \MyStruct.x]界面访问它的属性.
我需要的是一种访问所有关键路径的方法,例如:
extension MyStruct {
static func getAllKeyPaths() -> [WritableKeyPath<MyStruct, Bool>] {
return [
\MyStruct.x,
\MyStruct.y
]
}
}
Run Code Online (Sandbox Code Playgroud)
但是,显然,没有我必须手动声明数组中的每个属性.
我怎样才能做到这一点?
我试图隐藏单个视图控制器的导航控制器没有运气,导航栏被隐藏为第一个vc,但它没有显示第二个vc.
这是我在第一个vc中使用的代码:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Hide the Navigation Bar
self.navigationController?.setNavigationBarHidden(true, animated: animated)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// Show the Navigation Bar
self.navigationController?.setNavigationBarHidden(false, animated: animated)
}
Run Code Online (Sandbox Code Playgroud)
swift 4有什么变化?该代码在swift 3中有效...
我收到以下错误:
Generic parameter 'T' could not be inferred
在线: let data = try encoder.encode(obj)
这是代码
import Foundation
struct User: Codable {
var firstName: String
var lastName: String
}
let u1 = User(firstName: "Ann", lastName: "A")
let u2 = User(firstName: "Ben", lastName: "B")
let u3 = User(firstName: "Charlie", lastName: "C")
let u4 = User(firstName: "David", lastName: "D")
let a = [u1, u2, u3, u4]
var ret = [[String: Any]]()
for i in 0..<a.count {
let param = [
"a" : a[i], …Run Code Online (Sandbox Code Playgroud) 有人可以解释为什么@objc这里需要关键字来编译代码吗?
据我所知,这个关键字用于工作ObjC消息方法调度.但这不是一个NSObject例子.
class MyClass {
}
extension MyClass {
@objc func extensionMethod() { /// THIS LINE
print("A")
}
}
class SubClass: MyClass {
override func extensionMethod() {
print("B")
}
}
Run Code Online (Sandbox Code Playgroud)
@objc关键字是否启用消息调度以及dynamic?或不?
编辑
请参阅我的答案以获得完整的解决方案:
我设法通过使用UITextView而不是a 来解决这个问题UILabel.我写了一个类,使UITextView行为像一个UILabel但具有完全准确的链接检测.
我已经成功设置了链接的样式而没有使用问题,NSMutableAttributedString但我无法准确地检测到哪个字符已被点击.我已经尝试了这个问题中的所有解决方案(我可以转换为Swift 4代码),但没有运气.
以下代码有效,但无法准确检测单击了哪个字符并获取了链接的错误位置:
func didTapAttributedTextInLabel(label: UILabel, inRange targetRange: NSRange) -> Bool {
// Create instances of NSLayoutManager, NSTextContainer and NSTextStorage
let layoutManager = NSLayoutManager()
let textContainer = NSTextContainer(size: CGSize.zero)
let textStorage = NSTextStorage(attributedString: label.attributedText!)
// Configure layoutManager and textStorage
layoutManager.addTextContainer(textContainer)
textStorage.addLayoutManager(layoutManager)
// Configure textContainer
textContainer.lineFragmentPadding = 0.0
textContainer.lineBreakMode = label.lineBreakMode
textContainer.maximumNumberOfLines = label.numberOfLines
let labelSize = label.bounds.size
textContainer.size = labelSize
// Find the tapped …Run Code Online (Sandbox Code Playgroud) 我正在使用Xcode 9.0.
我的pod文件:
pod 'Alamofire', '~> 4.3'
pod 'SwiftyJSON'
pod 'AlamofireSwiftyJSON'
pod 'KSToastView', '0.5.7'
pod 'SDWebImage', '~> 4.0'
pod 'NVActivityIndicatorView'
pod 'Firebase/Core'
pod 'Firebase/Messaging'
pod 'CarbonKit'
pod 'SBPickerSelector'
pod 'SwiftyStoreKit'
pod 'Fabric'
pod 'Crashlytics'
pod 'SAMKeychain', '1.5.2'
Run Code Online (Sandbox Code Playgroud)
我的错误日志:
ld:无法在bitcode包中重新解析目标文件:'无效的bitcode版本(生产者:'902.0.39.2_0'Reader:'900.0.37_0')',使用libLTO版本'LLVM版本9.0.0,(clang-900.0.37) )'for architecture arm64 clang:error:链接器命令失败,退出代码为1(使用-v查看调用)
我读了很多关于这个问题的文章但是我无法解决它.我提到了这一点,是的,这注意到我想用我的项目构建存档
configuration = Debug
ENABLE_BITCODE = YES
configuration = Release
ENABLE_BITCODE = YES
completeSettings = some
ENABLE_BITCODE = YES
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我刚刚声明了一个名为“Users”数组的实体:
var UsersArray = [Users]()
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
使用未解析的标识符“用户”
提示:我确实导入了 CoreData 并创建了实体
tl;dr 我试图在 Twitter 应用程序中重新创建这个:https : //i.imgur.com/173CVyM.mp4
如您所见,Twitter 在提要(表格视图单元格)中播放视频,当视频被点击时,视频会平滑地过渡到它自己的视图控制器,而不会停止或缓冲视频。
我已经完成了在提要部分中播放的视频(在表格视图单元格中),但现在我被困在如何实际将视频平滑地转换为点击的视图控制器上。
在高层次上,我需要在这里做什么?
我当前的设置有一个AVPlayer实例作为每个表视图单元格的一部分。我会将AVPlayer实例传递给视图控制器并从那里继续播放视频吗?内存管理呢?我觉得AVPlayer每个表格视图单元格都有一个实例会导致一些问题,但我不完全确定。
作为第二个问题,如果我想忽略花哨的动画/过渡,当在表格视图单元格中点击视频时,我如何继续在视图控制器中无缝播放视频?