让我说我有一个字符串数组,我想将它映射到一个Int数组我可以使用map函数:
var arrayOfStrings: Array = ["0", "a"]
let numbersOptional = arrayOfStrings.map { $0.toInt() }
// numbersOptional = "[Optional(0), nil]"
Run Code Online (Sandbox Code Playgroud)
Numbers现在是一个Int?数组,但我想要一个Int数组.我知道我可以这样做:
let numbers = arrayOfStrings.map { $0.toInt() }.filter { $0 != nil }.map { $0! }
// numbers = [0]
Run Code Online (Sandbox Code Playgroud)
但这似乎并不是很迅速.从Int数组转换?对于Array of Int,需要使用相当多的样板函数来调用filter和map.有更快捷的方法吗?
我正在使用此代码从十六进制值创建UIColor.它的工作完美.
extension UIColor {
convenience init(red: Int, green: Int, blue: Int) {
assert(red >= 0 && red <= 255, "Invalid red component")
assert(green >= 0 && green <= 255, "Invalid green component")
assert(blue >= 0 && blue <= 255, "Invalid blue component")
self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0)
}
convenience init(netHex:Int) {
self.init(red:(netHex >> 16) & 0xff, green:(netHex >> 8) & 0xff, blue:netHex & 0xff)
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
var textColor = UIColor(netHex: …Run Code Online (Sandbox Code Playgroud) 我发现如何将六进制字符串转换为字节[UInt8],但我还没有找到如何将字节[UInt8]转换为Swift中的六进制字符串
这hexstring转换为string代码:
static func bytesConvertToHexstring(byte : [UInt8]) -> String {
var string = ""
for val in byte {
//getBytes(&byte, range: NSMakeRange(i, 1))
string = string + String(format: "%02X", val)
}
return string
}
Run Code Online (Sandbox Code Playgroud)
像这样的结果:
"F063C52A6FF7C8904D3F6E379EB85714ECA9C1CB1E8DFD6CA5D3B4A991269D60F607C565C327BD0ECC0985F74E5007E0D276499E1ADB4E0C92D8BDBB46E57705B2D5390FF5CBD4ED1B850C537301CA7E"
Run Code Online (Sandbox Code Playgroud)
UInt8 数组: [0, 11, 8, 15, 6, 6, 5, 8, 8, 4, 14, 14, 0, 0, 9, 12, 6, 4, 10, 6, 4, 8, 6, 2, 14, 2, 6, 13, 3, 3, 12, 4, 3, 12, 8, 13, 14, 4, …
let numbers = [1,3,4,5,5,9,0,1]
Run Code Online (Sandbox Code Playgroud)
要找到第一个5,请使用:
numbers.indexOf(5)
Run Code Online (Sandbox Code Playgroud)
我如何找到第二次出现?
我刚刚从beta 3进入Xcode 8 beta 4,但出于任何原因我得到的错误一直没有错误或直到beta 4发布.这里是错误" Value of type 'FileManager' has no member 'urlsForDirectory'"
我的代码:
func setupRecorder(){
let audioSession:AVAudioSession = AVAudioSession.sharedInstance()
//ask for permission
if (audioSession.responds(to: #selector(AVAudioSession.requestRecordPermission(_:)))) {
AVAudioSession.sharedInstance().requestRecordPermission({(granted: Bool)-> Void in
if granted {
print("Permission Granted\n")
//set category and activate recorder session
do {
//----
let fileManager = FileManager.default
let urls = fileManager.urlsForDirectory(.documentDirectory, inDomains: .userDomainMask)
//----
let documentDirectory = urls[0] as URL
let soundURL = try! documentDirectory.appendingPathComponent("sound.m4a")
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
try self.soundRecorder = AVAudioRecorder(url: soundURL, settings: self.recordSettings)
let micInput …Run Code Online (Sandbox Code Playgroud) 我是新来的任何想法.如何从json对象初始化结构.我无法弄清楚我该怎么做.
{"user":{"name":"cruskuaka","email":"cristlika @ gmail.com","phoneNo":"018833455"},"address":{"house":"100","street" ":"B","town":{"town_id":"1","town_name":"戈尔韦市中心"},"city":{"city_id":"10","city_name":"Galway" },"address_id":"200","full_address":"100,B,戈尔韦市中心,戈尔韦"},"delivery_instruction":"no call","delivery_method":"1"}
这里所有的结构:
struct Contact {
let user : User
let address : Address
let deliveryInstruction : String
let deliveryMethod : String
init(dictionary: [String: Any]) {
self.deliveryInstruction = dictionary["delivery_instruction"] as? String ?? ""
self.deliveryMethod = dictionary["delivery_method"] as? String ?? ""
self.address = Address(dictionary: dictionary["address"] as? [String:Any] ?? [:])
self.user = User(dictionary: dictionary["address"] as? [String:Any] ?? [:])
}
}
Run Code Online (Sandbox Code Playgroud)
struct User {
let name : String
let email : String
let phoneNo : String
init(dictionary …Run Code Online (Sandbox Code Playgroud) 我的Xcode项目中有一个XML文件,我想先把它保存到磁盘上,其次我怎么知道我是否成功保存了它?这是正确的方法吗?使用模拟器我导航到iOS 11中的新"文件"文件夹,我看不到它,但我不确定它是否应该存在?
guard let path = Bundle.main.url(forResource: "sample", withExtension: "xml") else {print("NO URL"); return}
let sample = try? Data(contentsOf: path)
print("sample XML = \(String(describing: sample?.debugDescription))")
//put xml file on the device
let filename = getDocumentsDirectory().appendingPathComponent("sample.xml")
do {
try sample?.write(to: filename)
} catch {
print("ERROR")
}
Run Code Online (Sandbox Code Playgroud)
更新以包括我检查文件是否存在:
//check if file exists
let checkPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let url = URL(fileURLWithPath: checkPath)
let filePath = url.appendingPathComponent("sample.xml").path
let fileManager = FileManager.default
if fileManager.fileExists(atPath: filePath) {
print("FILE AVAILABLE")
} else { …Run Code Online (Sandbox Code Playgroud) 我相信有更好,更合适的方法来做到这一点.但是现在我正在使用UIScreen.main.bounds来检测我是否正在处理iPhone X(812高).这个特定的应用程序只是景观,顺便说一句.所以这就是我在这个函数中所拥有的,我正在为幻灯片视图创建幻灯片:
func setupSlideViews(slideView: [SlideView]) {
let screenSize = UIScreen.main.bounds
var frame: CGRect!
if screenSize.width == 812 {
frame = scrollView.frame
} else {
frame = view.frame
}
scrollView.frame = frame
scrollView.contentSize = CGSize(width: frame.width * CGFloat(slideViews.count), height: frame.height)
for (i, slideView) in slideViews.enumerated() {
slideView.frame = CGRect(x: frame.width * CGFloat(i), y: 0, width: frame.width, height: frame.height)
scrollView.addSubview(slideView)
}
}
Run Code Online (Sandbox Code Playgroud)
但是你如何检查模型?
我很快,我正在尝试生成一个接受UIImage和UIColor并返回UIImage重新着色的函数
我不使用UIImageView,这些只是我打算用作图标的UIImages.有没有什么好方法可以实现这个?
我一直在对我的模型进行一些测试,以确保当我将它们编码为 JSON 然后使用JSONEncoder/Decoder. 然而,我的一项测试失败了,罪魁祸首是UIImage。我已确保在编码/解码过程中没有抛出任何错误。
首先,这是有问题的测试:
func testProfileImageCodable() throws {
let image = ProfileImage(UIImage(systemName: "applelogo")!)
try XCTAssertTrue(assertCodable(image))
}
Run Code Online (Sandbox Code Playgroud)
这是我的“可编码性”测试,我确保编码/解码之前和之后类型相等:
func assertCodable<T: Codable & Equatable>(
_ value: T,
decoder: JSONDecoder = .init(),
encoder: JSONEncoder = .init()
) throws -> Bool {
let encoded = try encoder.encode(value)
let decoded = try decoder.decode(T.self, from: encoded)
return value == decoded
}
Run Code Online (Sandbox Code Playgroud)
首先,这是我的UIImage工作方式Codable:
extension KeyedEncodingContainer {
mutating func encode(_ value: UIImage, forKey key: Key) throws {
guard let …Run Code Online (Sandbox Code Playgroud)